Netty NIO 開發指南
服務端創建
步驟:
- 創建ServerBootstrap實例。該類有着非常多的設置參數,因此採用Builder模式。
- 設置並綁定Reactor線程池。其實就是EventLoopGroup,就是一個EventLoop的數組。
- 設置並綁定服務端Channel。即NioServerSocketChannel。NioEventLoopGroup實際就是Reactor線程池,負責調度和執行客戶端的接入、網絡讀寫事件的處理、用戶自定義任務和定時任務的執行。
- 鏈路建立的時候創建並初始化ChannelPipeline。並不是NIO服務端必須的,本質就是一個負責處理網絡事件的職責鏈,負責管理和執行ChannelHandler。
- 典型網絡事件:
- 鏈路註冊、鏈路激活、鏈路斷開、接收到請求消息、請求消息接收並處理完畢、發送應答消息、鏈路發生異常、發生用戶自定義事件。
- 初始化ChannelPipeline完成之後,添加並設置ChannelHandler。
- 實用系統ChannelHandler:
- 系統編解碼框架——ByteToMessageCodec;
- 通用基於長度的半包解碼器——LengthFieldBasedFrameDecoder;
- 碼流日誌打印Handler——LoggingHandler
- SSL安全認證Handler——SslHandler
- 鏈路空閒檢測Handler——IdleStateHandler;
- 流量整形Handler——ChannelTrafficShapingHandler;
- Base64編解碼——Base64Decoder和Base64Encoder
- 實用系統ChannelHandler:
- 綁定並啓動監聽端口。
- Selector輪詢。由Reactor線程NioEventLoop負責調度和執行Selector輪詢操作,選擇準備就緒的Channel。
- 當輪詢到準備就緒的Channel之後,就由Reactor線程NioEventLoop執行ChannelPipeline的相應方法,最終調度並執行ChannelHandler。
- 執行Netty系統ChannelHandler和用戶添加定製的ChannelHandler。
backlog指定了內核爲此套接口排隊的最大連接個數,對於給定的監聽套接口,內核要維護兩個隊列:未鏈接隊列和已連接隊列,根據TCP三次握手過程中的三個分節來分隔這兩個隊列。