版权声明:士,不可以不弘毅,任重而道远 https://blog.csdn.net/superbeyone/article/details/85707544
Netty中两种发送消息的方式:
- 可以直接写到
Channel
中 - 可以写到与
ChannelHandler
所关联的那个ChannelHandlerContext
中
对于方式 1 来说,消息会从
ChannelPipeline
的末尾开始流动
对于方式 2 来说,消息将从
ChannelPipleline
中的下一个ChannelHandler
开始流动
总结:
凡是调用ChannelHandlerContext
的与Channel
当中的同名方法来说,ChannelHandlerContext
里面都是短路的方法,都是从它的下一个ChannelHandlerContext
开始流动,而对于Channel
来说, 对它的任何方法调用都会完整的将这个Handler
经过一遍。
即:通过ChannelHandlerContext
所调用的方法实际上会经过更少的Handler
对象,因此也会得到更少的处理。
针对具体的业务情况来做区分,是需要流经所有的Handler
对象,还是只流经当前调用的Handler
对象的下一个Handler
就可以了,如果第二种情况就可以满足需求的话,就可以调用ChannelHandlerContext
里面的方法,这样就能得到更少的处理,效率就会更高。
概括总结:
ChannelHandlerContext
与ChannelHandler
之间的关联绑定关系是永远都不会发生改变的,因此对其进行缓存是没有任何问题的。- 对于与
Channel
的同名方法来说,ChannelHandlerContext
的方法将会产生更短的事件流,所以应该在可能的情况下利用这个特性来提升应用性能。