您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關Netty組件中怎么初始化Channel,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
一、DefaultChannelPipeline實例化
DefaultChannelPipeline隨著Channel的創建而創建,即只要創建了Channel就會同時創建與其對應的ChannelPipeline。下面代碼是Channel實例化時調用,上篇文章文末的代碼。
ChannelHandlerContext直觀從命名上看出為ChannelHandler上下文,每次構造DefaultChannelHandlerContext都會傳入與之對應的ChannelHandler.
ChannelHandlerContext類圖結構
從下面類圖結構可以看出,ChannelPipeline提供了很多操作鏈表的方法,addFirst/addLast/addBefore/addLast/remove/replace等,入參為ChannelHandler。ChannelPipeline的各種fire操作均通過HandlerContext進行處理。
先從下面代碼看下運營時的鏈表結構,截圖如下。
示例代碼
內存結構
畫個示意圖來說明ChannelPipeline、ChannelHandlerContext、ChannelHandler的關系。
關系圖示
一、Channel初始化
切換到Channel初始化過程,在客戶端引導類Bootstrap調用b.connect()或者服務端引導類ServerBootstrap調用bind()時,會調用到抽象引導類AbstractBootstrap的initAndRegister()。下面紅色部分即channel初始化入口。
@1 客戶端初始化代碼中,將ChannelHandler通過DefaultChannelHandlerContext加入ChannelPipeline鏈表中
@2 setChannelOptions以NioChannelOption為例,客戶端最后調用到SocketChannelImpl#setOption(); 可以對以下屬性進行設置
StandardSocketOptions.SO_RCVBUF // 接受緩存區大小
StandardSocketOptions.SO_SNDBUF // 發送緩存區大小
StandardSocketOptions.SO_LINGER // 設置延遲關閉的時間
StandardSocketOptions.IP_TOS // 設置數據包優先級
StandardSocketOptions.IP_MULTICAST_TTL // 設置多播組數據的TTL值
...
@1 setChannelOptions同樣以NioChannelOption為例,服務端會調用到ServerSocketChannelImpl#setOption(),參數含義見客戶端端初始化@1
@2 ChannelInitializer實現了ChannelHandler加入到了ChannelPipeline的鏈表中,其中的邏輯在另文分析EventLoopGroup時梳理
以上就是Netty組件中怎么初始化Channel,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。