1. 程式人生 > >Netty兩種傳送訊息方式的區別

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的方法將會產生更短的事件流,所以應該在可能的情況下利用這個特性來提升應用效能。