ChannelHandler用来处理channel的I/O事件,其类结构如下:
它所能处理的事件如下:
在netty中,ChannelHandler不会直接添加到pipeline中,而是通过ChannelHandlerContext进行一层包装,通过ChannelHandlerContext可实现事件传播,其类图如下:
ChannelHandlerContext的功能与ChannelHandler类似,当调用fireXXX
方法时会触发handler相应的方法,如下:
ChannelHandlerContext通过它的成员参数prev和next来形成链表,当有事件进入链表时能进行向上传播或者向下传播。
默认的一般使用DefaultChannelHandlerContext。
netty中通过pipeline将处理channel的操作形成一条流水线,它的功能如下:
pipeline的参数如下:
在创建默认的pipeline时会先初始化head和tail节点 ,当添加新的handler时会添加到两者中间。
以addFirst
为例看下handler, context, pipeline三者的联系:
总结:本文主要介绍了ChannelHandler, ChannelHandlerContext, Pipeline三者的功能与关系。