Channel之间的关系:

一个Channel会被分配一个独一的Pipelie,Pipelie包含了注册的ChannelHandler,Pipeline和ChannelHandler的关系通过ChannelHandlerContext来管理。再回顾一下,一个Pipeline实例是专属的(一个Channel一个Pipeline)。

会导致事件流会从头部流经尾部的调用

  • 调用Channel的方法
  • 调用Pipeline的方法

上面两种方法都会导致事件从Pipeline的头部开始传播,而ChannelHandler的传播则是通过ChannelHandlerContext管理

事件从某个特定点开始传播

由于Pipeline中的ChannelHandler是通过ChannelHandlerContext进行管理的,ChannelHandlerContext存储了一个next指引指向下一个关联的ChannelHandler,所以在调用某个ChannelHandlerContext来触发方法时,不会导致事件从头到尾传播。
从某个事件点开始传播的好处:

  • 减少事件传播到对该事件不感兴趣的ChannelHandler

触发过程:
假如要从某个特定的ChannelHandler开始处理,必须先获取到(当前Pipeline)该ChannelHander之前的ChannelHandlerContext,这个ChannelHandlerContext将调用与它所关联的ChannelHandler之后的ChannelHandler

为什么共享一个ChannelHandler变量

在多个Pipeline中安装同一个ChannelHandler的一个常见的原因是用于收集跨多个Channel的统计信息