www.zhblog.net

Netty 核心组件

为了了解Netty的工作原理,对Netty的内部设计有一个总体了解是很有用的。几个核心概念:

Bootstrap

EventLoopGroup

EventLoop

SocketChannel

ChannelInitializer

ChannelPipeline

ChannelHandler


这些概念如何相互关联如下所示:

overview-0.png


Bootstrap

Netty中的Bootstrap类负责引导,引导过程包括启动线程,打开套接字等。


EventLoopGroup

Netty EventLoopGroup是EventLoop的分组,多个EventLoop可以组合在一起,这样,EventLoop可以共享一些资源。


EventLoop

Netty EventLoop是一个事件循环,例如网络套接字(来自SocketChannel)传入数据。当发生事件时,该事件将传递到适当的事件处理程序,例如ChannelHandler。


SocketChannel

Netty SocketChannel表示通过网络与另一台计算机的TCP连接。无论你是将Netty用作客户端还是服务器,与网络上其它计算机交换的所有数据都将通过SocketChannel实例传递,该实例表示计算机之间的TCP连接。 SocektChannel由EventLoop管理,并且始终仅由相同的EventLoop管理。由于EventLoop始终由同一线程执行,因此SocketChannel实例也只能由同一线程访问。因此,从SocketChannel读取数据时,不必担心同步问题。


ChannelInitializer

Netty ChannelInitializer是一个特殊的ChannelHandler,在创建SocketChannel时,它将附加到SocketChannel的ChannelPipeline。然后调用ChannelInitializer,以便它可以初始化SocketChannel。 初始化SocketChannel后,ChannelInitializer会将其自身从ChannelPipeline中删除。


ChannelPipeline 

每个Netty SocketChannel都有一个ChannelPipeline。 ChannelPipeline包含ChannelHandler实例的列表。当EventLoop从SocketChannel读取数据时,数据将传递到ChannelPipeline中的第一个ChannelHandler。第一个ChannelHandler处理数据,可以选择将其转发到ChannelPipeline中的下一个ChannelHandler,然后,该处理程序也可以选择将其转发至ChannelPipeline中的下一个ChannelHandler等。 当将数据写到SocketChannel时,在最终写入SocketChannel之前,写入的数据还将通过ChannelPipeline传递。


ChannelHandler 

Netty ChannelHandler处理从Netty SocketChannel接收的数据。 ChannelHandler还可以处理正在写到SocketChannel的数据。


 

展开阅读全文

评论

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 心情