Netty中Channel、ChannelPipeline、ChannelHandler、ChannelHandlerContext之間的關係

在這裏插入圖片描述

public interface Channel extends AttributeMap, ChannelOutboundInvoker, Comparable<Channel> {
// ...
ChannelPipeline pipeline();
// ...

}

每一個 Channel 被創建,就會生成一個與其綁定的 ChannelPipeline。

ChannelPipeline 中包含了一個處理該 Channel 消息的 ChannelHandler 執行鏈。
在這裏插入圖片描述

當每一個 ChannelHandler 被註冊到該 ChannelPipeline 中就會生成一個對應的 ChannelHandlerContext,和該 ChannelHandler 進行綁定。

ChannelHandler 的執行器鏈 ChannelPipeline 是由 ChannelHandlerContext 作爲結點組成的雙向鏈表。

public interface ChannelHandlerContext extends AttributeMap, ChannelInboundInvoker, ChannelOutboundInvoker {
    // ...
    Channel channel();
    ChannelHandler handler();
	// ...
}	

一個 ChannelHandler 可以從屬於(註冊到)多個 ChannelPipeline。所以,一個 ChannelHandler 可以綁定多個 ChannelHandlerContext
不過,這樣的ChannelHandler必須使用 @Sharable 註解標註,保證它的線程安全性,否則試圖將它註冊到多個 ChannelHandlerPipeline 中時將會拋出異常。


https://netty.io/4.0/api/io/netty/channel/ChannelPipeline.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章