netty简单的服务端和客户端创建.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
netty简单的服务端和客户端创建

Netty前言:高性能的三大主题:1) 传输:用什么样的通道将数据发送给对方,BIO、NIO或者AIO,IO模型在很大程度上决定了框架的性能。2) 协议:采用什么样的通信协议,HTTP或者内部私有协议。协议的选择不同,性能模型也不同。相比于公有协议,内部私有协议的性能通常可以被设计的更优。3) 线程:数据报如何读取?读取之后的编解码在哪个线程进行,编解码后的消息如何派发,Reactor线程模型的不同,对性能的影响也非常大。Netty 高性能的表现:异步非阻塞通信零拷贝Netty的接收和发送ByteBuffer采用DIRECT BUFFERS,使用堆外直接内存进行Socket读写,不需要进行字节缓冲区的二次拷贝2) Netty提供了组合Buffer对象,可以聚合多个ByteBuffer对象,用户可以像操作一个Buffer那样方便的对组合Buffer进行操作,避免系统统通过内存拷贝的方式将几个小Buffer合并成一个大的Buffer。3) Netty的文件传输采用了transferTo方法,它可以直接将文件缓冲区的数据发送到目标Channel,避免了传统通过循环write方式导致的内存拷贝问题。内存池高效的Reactor线程模型无锁化的串行设计理念高效的并发编程高性能的序列化框架灵活的TCP参数配置能力Netty 服务端创建(详细解析):创建TimeService:代码如下:package ty.demo;import ty.bootstrap.ServerBootstrap;import ty.channel.ChannelFuture;import ty.channel.ChannelInitializer;import ty.channel.ChannelOption;import ty.channel.ChannelPipeline;import ty.channel.EventLoopGroup;import ty.channel.nio.NioEventLoopGroup;import ty.channel.socket.SocketChannel;import ty.channel.socket.nio.NioServerSocketChannel;import ty.handler.codec.DelimiterBasedFrameDecoder;import ty.handler.codec.Delimiters;import ty.handler.codec.string.StringDecoder;import ty.handler.codec.string.StringEncoder;/** * Time Netty服务端 * * @author zhouxm@ * */public class TimeService {public void bind(int port) throws Exception {// 配置NIO服务端线程组EventLoopGroup bossGroup = new NioEventLoopGroup();// 用于服务端接收客户端的链接EventLoopGroup workGroup = new NioEventLoopGroup();// 用于SocketChannel网络读写try {// 创建NIO服务端辅助启动类ServerBootstrap b = new ServerBootstrap();b.group(bossGroup, workGroup).channel(NioServerSocketChannel.class).option(ChannelOption.SO_BACKLOG, 1024).childHandler(new ChildChannelHander());// 绑定监听端口,同步等待成功ChannelFuture f = b.bind(port).sync();// 等待监听端口关闭f.channel().closeFuture().sync();// b.bind(port).sync().channel().closeFuture().sync();//也可以这样将上面两步骤合并,使代码更简洁} finally {// 退出,释放线程池资源bossGroup.shutdownGracefully();workGroup.shutdownGracefully();}}// 用户处理网络IO事件,类似于Reactor模式中的handle类 例:消息编解码 日志打印private class ChildChannelHander extends ChannelInitializerSocketChannel {@Overridepro

文档评论(0)

6952225 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档