Netty两种发送消息方式的区别

Netty中两种发送消息的方式:

  1. 可以直接写到Channel
  2. 可以写到与ChannelHandler所关联的那个ChannelHandlerContext

对于方式 1 来说,消息会从ChannelPipeline的末尾开始流动

对于方式 2 来说,消息将从ChannelPipleline中的下一个ChannelHandler开始流动

总结:

凡是调用ChannelHandlerContext的与Channel当中的同名方法来说,ChannelHandlerContext里面都是短路的方法,都是从它的下一个ChannelHandlerContext开始流动,而对于Channel来说, 对它的任何方法调用都会完整的将这个Handler经过一遍。
即:通过ChannelHandlerContext所调用的方法实际上会经过更少的Handler对象,因此也会得到更少的处理。

针对具体的业务情况来做区分,是需要流经所有的Handler对象,还是只流经当前调用的Handler对象的下一个Handler就可以了,如果第二种情况就可以满足需求的话,就可以调用ChannelHandlerContext里面的方法,这样就能得到更少的处理,效率就会更高。

概括总结:

  1. ChannelHandlerContextChannelHandler之间的关联绑定关系是永远都不会发生改变的,因此对其进行缓存是没有任何问题的。
  2. 对于与Channel的同名方法来说,ChannelHandlerContext的方法将会产生更短的事件流,所以应该在可能的情况下利用这个特性来提升应用性能。

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