目錄
- 前言
- 1. Netty 簡介
- 2. Netty 的核心元件
- 2.1 Channel
- 2.2 回調
- 2.3 Future
- 2.4 事件和 ChannelHandler
- 2.5 Netty 的設計
- 最後
參考資料:
- 《Netty In Action》;
本系列為 Netty 學習筆記,本篇介紹總結Netty 簡介。主要參考書籍《Netty In Action》的第一章,對 Netty 做大概介紹;
- Netty 是一個異步的、基于事件驅動的網絡應用架構;
- Netty 主要針對在 TCP 協定下,面向 Clients 端的高并發應用,或者 Peer-to-Peer 場景下的大量資料持續傳輸的應用;
- Netty 本質是一個 NIO 架構,适用于伺服器通訊相關的多種應用場景;
- Netty 的特性總結:
分類 Netty 的特性 設計 統一的 API,支援多種傳輸種類,阻塞和非阻塞的;無連接配接資料報套接字支援;連結邏輯元件支援複用 易于使用 JDK 1.8+ 的依賴;文檔資料多 性能 比 Java 核心 API 更高的吞吐量以及更低的延遲 健壯性 在慢速、快速或超載的連接配接下正常運作; 安全性 完整的 SSL/TLS 以及 StartTLS 支援 社群驅動 釋出快速且頻繁 - 異步和可伸縮性間的關系:
- 異步允許我們以任意順序響應在任意時間點産生的事件;
- 可伸縮性要求我們在需要處理的工作不斷增長時,處理它的能力也要擴大;
- 非阻塞網絡調用允許我們不必等待一個操作的完成;
- 完全異步 IO 在完成時,會直接或在稍後某個時間點通知使用者;
- 選擇器使得我們能夠通過較少的線程便可監視許多連接配接上的事件;
- Channel 是 Java NIO 的一個基本構造;
- 它代表一個到實體的開放連接配接;
- Channel 可以是傳入(入站)或傳出(出站)資料的載體;它可以被打開或關閉,連接配接或斷開連接配接;
- 回調指:一個指向已經被提供給另外一個方法的方法的引用;
- Netty 在内部使用回調處理事件:當一個回調被觸發時,相關事件可以被一個
是實作處理;interface-ChannelHandler
- Future 提供另一種在操作完成時通知應用程式的方法;
- Netty 提供自己的實作——ChannelFuture,用于在執行異步操作時使用;
- 監聽器的回調方法
,将會在對應的操作完成是被調用;operationComplete()
- 每個 Netty 的出站 IO 操作都會傳回一個 ChannelFuture;
- Netty 使用不同的事件來通知我們狀态的改變或操作的狀态。這使得我們能夠基于發生的事件來觸發适當的動作;
- 由入站資料或相關狀态更改而觸發的事件包括:
- 連接配接已被激活或者連接配接失敗;
- 資料讀取;
- 使用者事件;
- 錯誤事件;
- 出站事件是在未來會觸發的某個動作的結果,這些動作有:
- 打開或關閉到遠端節點的連接配接;
- 将資料寫到或沖刷到套接字;

- Netty 的異步程式設計模型建立在 Future 和回調之上,而将事件派發到 ChannelHandler 的方法發生在更深的層次上;
- 攔截操作以及高速地轉換入站資料和出站資料,都隻需要提供回調或者利用操作所傳回的 Future;
- Netty 通過觸發事件将 Selector 從應用程式中抽象出來,消除了原有将需要手動編寫的派發代碼;
- 在内部,Netty 會為每個 Channel 配置設定一個 EventLoop,用以處理所有事件;
- EventLoop 本身是一個線程驅動,其處理了一個 Channel 的所有 IO 事件,并且在該 EventLoop 的整個生命周期内不會改變;
新人制作,如有錯誤,歡迎指出,感激不盡!
歡迎關注公衆号,會分享一些更日常的東西!
如需轉載,請标注出處!