Netty兩種傳送訊息方式的區別
阿新 • • 發佈:2019-01-04
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
的方法將會產生更短的事件流,所以應該在可能的情況下利用這個特性來提升應用效能。