《Netty》从零开始学netty源码(十二)之ChannelHandler

ChannelHandler用来处理channel的I/O事件,其类结构如下:
《Netty》从零开始学netty源码(十二)之ChannelHandler_第1张图片

它所能处理的事件如下:

《Netty》从零开始学netty源码(十二)之ChannelHandler_第2张图片

在netty中,ChannelHandler不会直接添加到pipeline中,而是通过ChannelHandlerContext进行一层包装,通过ChannelHandlerContext可实现事件传播,其类图如下:

《Netty》从零开始学netty源码(十二)之ChannelHandler_第3张图片

ChannelHandlerContext的功能与ChannelHandler类似,当调用fireXXX方法时会触发handler相应的方法,如下:

《Netty》从零开始学netty源码(十二)之ChannelHandler_第4张图片

ChannelHandlerContext通过它的成员参数prev和next来形成链表,当有事件进入链表时能进行向上传播或者向下传播。
《Netty》从零开始学netty源码(十二)之ChannelHandler_第5张图片

默认的一般使用DefaultChannelHandlerContext

netty中通过pipeline将处理channel的操作形成一条流水线,它的功能如下:

《Netty》从零开始学netty源码(十二)之ChannelHandler_第6张图片

pipeline的参数如下:

《Netty》从零开始学netty源码(十二)之ChannelHandler_第7张图片

在创建默认的pipeline时会先初始化head和tail节点 ,当添加新的handler时会添加到两者中间。

《Netty》从零开始学netty源码(十二)之ChannelHandler_第8张图片

addFirst为例看下handler, context, pipeline三者的联系:

《Netty》从零开始学netty源码(十二)之ChannelHandler_第9张图片

总结:本文主要介绍了ChannelHandler, ChannelHandlerContext, Pipeline三者的功能与关系。

你可能感兴趣的:(Netty,netty)