<center id="qc6w2"><div id="qc6w2"></div></center>
<center id="qc6w2"></center>
<center id="qc6w2"><wbr id="qc6w2"></wbr></center>
<optgroup id="qc6w2"><div id="qc6w2"></div></optgroup>

您现在的位置是:网站首页> 内容页

netty源码解解析(4.0)-1 核心架构

  • 宝运莱手机版登录
  • 2019-03-25
  • 411人已阅读
简介netty是java开源社区的一个优秀的网络框架。使用netty,我们可以迅速地开发出稳定,高性能,安全的,扩展性良好的服务器应用程序。netty封装简化了在服务器开发领域的一些有挑战
netty是java开源社区的一个优秀的网络框架。使用netty,我们可以迅速地开发出稳定,高性能,安全的,扩展性良好的服务器应用程序。netty封装简化了在服务器开发领域的一些有挑战性的问题:jdk nio的使用;多线程并发;扩展性。它还提供了多种应用层协议的支持:http/https/websock, protobuf, 自定义协议, 简化了服务器协议的开发。netty是一个基于?#24405;?#39537;动的框架,它把?#24405;?#20998;成两种类型:输入?#24405;?inbound)和输出?#24405;?outbound), 整个框架都是围绕?#24405;?#22788;理进行设计的,以下是netty的核心架构:上图中涉及到了netty的六个核心对象:Channel: 一个I/O操作的对象,所有的inbound?#24405;?#37117;是由Channel产生,outbound?#24405;?#26368;终都会有Channel处理(如果outbound?#24405;?#27809;有被用户注册的handler丢弃的话)。ChannelPipeline: 有一个ChannelPipeline实例属于一个Channel实例,它是?#24405;?#20256;播的管道,从Channel实例接收inbound?#24405;?#25226;outbound?#24405;?#25552;交给Channel。ChannelHandlerContext: 这是一个双向链表结构,它的多个实例组成了一个双向链表,并有ChannelPipeline负责维护。 在ChannelPipeline的默认实现中,这个链默认添加了Head和Tail节点, Head节点同时实现ChannelOutboundHandler和ChannelInboundHandler接口,Head节点比较特殊,它会最终把?#24405;?#20132;给Channel处理。Tail节点实现了ChannelInboundHandler接口,使用Channel触发的inbound?#24405;?#20250;首先传到这里处理。ChannelHandler: 这里是netty的扩展接口,也是真正实现服务器通讯协议和业务功能功能的地方。ChannelHandler有两种类型:处理输入?#24405;?#30340;ChannelinboundHandler和处理输出?#24405;?#30340;ChannelOutboundHandler。用户的ChannelHandler要实现这两个接口中的?#25105;?#19968;个或全部。当用户向ChannelPipeline注册自己的ChannelHandler时,ChannelPipleline会创建一个相应的ChannelHandlerContext实例,并让这个实例持有用户注册的ChannelHandler实例。然后把这个实例添加到双向链表中。用户注册的ChannelHandler的类型决定了这个实例的类型,进而决定了这个实例能够处理的?#24405;?#31867;型。EventLoopGroup: 在Channel?#29616;?#34892;I/O的线程组,netty把这个线程组中的线程定义为I/O线程,后面会讲到,有些特定的?#24405;?#24517;须在I/O线程中处理。EventExecutorGroup: 用来执行ChannelHandlerContext和ChannelHandler中回调方法的线程。在用户向ChannelPipeline中注册一个ChannelHanlder时,如果指定了一个EventExecutorGroup,那么它和它对应的ChannelHandlerContext都会在指定的EventExecutorGroup执行,否则,在Channel的EventLoopGroup中执行。?以上是netty核心架构中的核心核心对象,netty提供的所?#24515;?#21147;都是通过对这些核心对象的扩展实现的。例如:NioSocketChannel和NioServerSocketChannel扩展了Channel, NioEventLoopGroup扩展了EventLoopGroup, netty通过这一组扩展实现了对JDK NIO的封装。ProtoBufDecoer和ProtoBufEncoder扩展ChannelHandler实现了对potobuf协议的支持。HttpObjectDecoder和HttpObjectEncoder扩展ChannelHandler实现了对http协议的支持。此外开发者还可通过对EventLoopGroup和EventExecutorGroup扩展实现不一样的线程模型,满足特定业务场景的需求。还可以对ChannelPipleline和ChannelHandlerContext扩展实现自定义的?#24405;?#20256;递和处理流程。

?

文章评论

Top 安徽11选五开奖走势图
<center id="qc6w2"><div id="qc6w2"></div></center>
<center id="qc6w2"></center>
<center id="qc6w2"><wbr id="qc6w2"></wbr></center>
<optgroup id="qc6w2"><div id="qc6w2"></div></optgroup>
<center id="qc6w2"><div id="qc6w2"></div></center>
<center id="qc6w2"></center>
<center id="qc6w2"><wbr id="qc6w2"></wbr></center>
<optgroup id="qc6w2"><div id="qc6w2"></div></optgroup>