Netty之ChannelPipeline和ChannelHandler(1)

Netty的ChannelPipeline和ChannelHandler机制类似于Servlet和Filter过滤器,这类拦截器实际上是职责链模式的一种变形,主要是为了方便事件的拦截和用户业务逻辑的顶指。
Netty的Channel过滤器实现原理于Servlet Filter机制一致,她将Channel的数据管道抽象为ChannelPipeline,消息在ChannelPipeline中流动和传递。ChannelPipeline持有I/O事件拦截器ChannelHandler的链表,由ChannelHandler对I/O事件进行拦截和处理,可以方便地通过新增和删除ChannelHandler来实现对不同地业务逻辑定制,不需要对已有地ChannelHandler进行修改,能够实现对修改封闭和对扩展地支持。

ChannelPipeline是ChannelHandler地容器,它负责ChannelHandler地管理和事件拦截与调度。

ChannelPipeline的事件处理

Netty之ChannelPipeline和ChannelHandler(1)

  • 底层地SocketChannel read()方法读取ByteBuf,触发ChannelRead事件,由I/线程NioEventLoop调用ChannelPipeline地fireChannelRead(Object msg)方法,将消息(ByteBuf)传输到ChannelPipeline中;
  • 消息依次被HeadHandler、Channel Handler1、CannelHandler2…TailHandler拦截和处理,在这个过程中,任何Ch