Netty服務端創建過程分析

Netty服務端創建過程分析

在這裏插入圖片描述
步驟一: 創建ServerBootstrap實例。
步驟二: 設置並綁定Reactor線程池。Netty的Reactor線程池是EventLoopGroup,它實際就是EventLoop的數組。EventLoop的職責是處理所有註冊到本線程多路複用器Selector上的Channel,Selector的輪詢操作由綁定的EventLoop線程run方法驅動,在一個循環體內循環執行。EventLoop的職責不僅僅是處理網絡I/O事件,用戶自定義的Task和定時任務Task也統一由EventLoop負責執行,從而線程模型實現了統一。
步驟三: 設置並綁定服務端Channel。作爲NIO服務端,需要創建ServerSocketChannel,Netty對原生的NIO類庫進行了封裝,對應實現是NioServerSocketChannel。Netty通過工廠類,利用反射創建NioServerSocketChannel對象。
步驟四: 鏈路建立的時候創建並初始化ChannelPipeline。ChannelPipeline並不是NIO服務端必需的,它本質就是一個負責處理網絡事件的職責鏈,負責管理和執行ChannelHandler。網絡事件以事件流的形式在ChannelPipeline中流轉,由ChannelPipeline根據ChannelHandler的執行策略調度ChannelHandler的執行。
主要網絡事件有:
(1)鏈路註冊:
(2)鏈路激活
(3)鏈路斷開
(4)接收到請求消息
(5)請求消息接收並處理完畢
(6)發送應答消息
(7)鏈路發生異常
(8)發生用戶自定義事件
步驟五: 初始化ChannelPipeline完成之後,添加並設置ChannelHandler。ChannelHandler是Netty提供給用戶定製和擴展到關鍵接口。利用ChannelHandler用戶可以完成大多數的功能定製,例如消息編解碼、心跳、安全認證、TSL/SSL認證、流量控制和流量整形等。
常用ChannelHandler有:
(1)系統編解碼框架----ByteToMessageCodec
(2)通用基於長度的半包解碼器----LengthFieldBasedFrameDecoder
(3)碼流日誌打印Handler----LoggingHandler
(4)SSL安全認證Handler----SslHandler
(5)鏈路空閒檢測Handler----IdleStateHandler
(6)流量整形Handler----ChannelTrafficShapingHandler
(7)Base64編解碼----Base64Decoder和Base64Encoder
步驟六: 綁定並啓動監聽端口。在綁定監聽端口之前系統會做一系列的初始化和檢測工作,完成之後,會啓動監聽端口,並將ServerSocketChannel註冊到Selector上監聽客戶端連接。
步驟七: Selector輪詢。由Reactor線程NioEventLoop負責調度和執行Selector輪詢操作
步驟八: 當輪詢到準備就緒的Channel之後,就由Reactor線程NioEventLoop執行ChannelPipeline的相應方法,最終調度並執行ChannelHandler
步驟九: 執行Netty系統ChannelHandler和用戶添加定製的ChannelHandler

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