随笔分类
ChannelPipeline
在 ChannelPipeline传播事件时,它会测试 ChannelPipeline中的 下一个 ChannelHandler的类型是否和事件的运动方向相匹配
;如果不匹配,ChannelPipeline则会跳过该 ChannelHandler并前进到下一个,直到找到和该事件所期望的方向相匹配的为止
聊聊 ChannelHandlerContext?
ChannelHandlerContext使得 ChannelHandler能够和它的 ChannelPipeline以及其它的 ChannelHandler进行交互;ChannelHandler可以通知其属的 ChannelPipeline中的下一个 ChannelHandler,甚至可以动态修改它所属的 ChannelPipeline;
ChannelHandlerContext具有丰富的用于处理事件和执行 IO操作的 API.
ChannelHandlerContext的主要功能:管理它所关联的 ChannelHandler和在同一个ChannelPipeline中的其它 ChannelHandler之间的交互
ChannelHandlerContext有很多的方法,其中一些方法也存在 Channel和 ChannelPipeline本身上,但是有一点重要的区别:
-
如果调用 Channel 或者 ChannelPipeline上的这些方法,它们将会沿着整个 ChannelPipeline进行传播
而调用位于 ChannelHandlerContext上的相同方法,则会从当前所关联的 ChannelHandler开始,并且只会传播给位于该 ChannelPipeline中的下一个能够处理该事件的 ChannelHandler.
可以看出,使用 ChannelHandlerContext的方法 将产生更短的事件流
,因此,我们应该尽可能地利用这个特性来获得最大的性能
为什么会想要从 ChannelPipeline中的某个特定点开始传播事件呢?
- 为了减少将事件传经对它不感兴趣的 ChannelHandler所带来的开销
- 为了避免将事件传经那些可能会对它感兴趣的 ChannelHandler