java用netty写udp与tcp

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Netty中的UDP、TCP编程
Netty是由JBOSS提供的一个java开源框架。

Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。

也就是说,Netty 是一个基于NIO的客户,服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。

Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。

“快速”和“简单”并不意味着会让你的最终应用产生维护性或性能上的问题。

Netty 是一个吸收了多种协议的实现经验,这些协议包括FTP,SMTP,HTTP,各种二进制,文本协议,并经过相当精心设计的项目,最终,Netty 成功的找到了一种方式,在保证易于开发的同时还保证了其应用的性能,稳定性和伸缩性
先使用udp方式:
public class RestUdpNetty {
/**
* channel通道
*/
public static DatagramChannel channel;
/**
* 日志
*/
private static final Logger LOG =
LoggerFactory.getLogger(RestUdpNetty.class);
private static int port;
/**
*
* Description:获取通道 Date:2013-4-27
*
* @author Administrator
* @return DatagramChannel
*/
public static DatagramChannel getChannel() {
return channel;
}
/**
*
* Description: 注入通道对象Date:2013-4-27
*
* @author Administrator
* @param channel
* void
*/
public static void setChannel(DatagramChannel channel) { RestUdpNetty.channel = channel;
}
public static int getPort() {
return port;
}
public static void setPort(int port) {
RestUdpNetty.port = port;
}
/**
* Description:初始化方法 Date:2013-4-27
*
* @author Administrator void
*/
public static void init() {
// Server服务启动器
ConnectionlessBootstrap bootstrap = new ConnectionlessBootstrap(new NioDatagramChannelFactory());
// 设置一个处理客户端消息和各种消息事件的类(Handler)
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() throws Exception { return Channels.pipeline(
new
ObjectDecoder(ClassResolvers.cacheDisabled(this.getClass().get ClassLoader())),
new ObjectEncoder(), new NettyRequestUdpHandler());
}
});
bootstrap.setOption("receiveBufferSize", 500 * 1024 * 1024);
bootstrap.setOption("tcpNoDelay", true);
// 设置单个udp最大接收字节1024,默认为768
bootstrap.setOption("receiveBufferSizePredictorFactory", new FixedReceiveBufferSizePredictorFactory(1048576));
// 绑定端口
channel = (DatagramChannel) bootstrap.bind(new InetSocketAddress(port));
}
public static void main(String[] args) {
RestUdpNetty.setPort(10011);
RestUdpNetty.init();
}
/**
*
* Description:向指定ip、端口发送数据 Date:2013-4-27
*
* @author Administrator
* @param map
* @param ip
* @param port
* void
*/
public static void send(Map map, String ip, int port) { RestUdpNetty.channel.write(map, new InetSocketAddress(ip, port));
}
public static void send(Map map, SocketAddress address) { RestUdpNetty.channel.write(map, address);
}
}
二、使用TCP方式
public class RestCommandTcpNetty {
public static Channel channel;
private static int cilentPort;
private static InetSocketAddress commandHostAddress;
public static void init() {
ChannelFactory factory = new NioClientSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool());
ClientBootstrap bootstrap = new ClientBootstrap(factory);
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
@Override
public ChannelPipeline getPipeline() throws Exception { return Channels.pipeline(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 4, 0, 4),
new LengthFieldPrepender(4, false), new NettyRequestCommandTcpHandler());
}
});
bootstrap.setOption("tcpNoDelay", true);
bootstrap.setOption("keepAlive", true);
bootstrap.setOption("reuseAddress", true);
bootstrap.setOption("receiveBufferSize", 500 * 1024 * 1024);
bootstrap.setOption("receiveBufferSizePredictorFactory", new FixedReceiveBufferSizePredictorFactory(1024 * 1024));
ChannelFuture channelFuture =
bootstrap.connect(commandHostAddress, new
InetSocketAddress(cilentPort));
channel = channelFuture.getChannel();
}
/**
*
* Description: Date:2014-6-20 发送给服务端
*
* @author shenbf
* @param@param obj
* @param@param engineCode
* @return void
*/
public static void sendToServer(Object obj, int engineCode) { // 编码
ChannelBuffer buffer = NettyEcoderUtil.ecoder(obj, StringUtil.toString(engineCode),
CacheSysConstant.DATA_COMMAND_TYPE);
channel.write(buffer);
}
public static void setPort(int port) {
RestCommandTcpNetty.cilentPort = port;
}
public static void setHostAddress(InetSocketAddress address) {
mandHostAddress = address;
}
}。

相关文档
最新文档