4.1 原生 NIO 存在的問題
-
NIO 的類庫和 API 繁雜,使用麻煩:需要熟練掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。
-
需要具備其他的額外技能:要熟悉 Java 多線程編程,因爲 NIO 編程涉及到 Reactor 模式,你必須對多線程和網絡編程非常熟悉,才能編寫出高質量的 NIO 程序。
-
開發工作量和難度都非常大:例如客戶端面臨斷連重連、網絡閃斷、半包讀寫、失敗緩存、網絡擁塞和異常流的處理等等。
-
JDK NIO 的 Bug:例如臭名昭著的 Epoll Bug,它會導致 Selector 空輪詢,最終導致 CPU 100%。直到 JDK 1.7版本該問題仍舊存在,沒有被根本解決
4.2 Netty 官網說明
官網:https://netty.io/
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients
Netty 是由 JBOSS 提供的一個 Java 開源框架。Netty 提供異步的、基於事件驅動的網絡應用程序框架,用以快速開發高性能、高可靠性的網絡 IO 程序
Netty 可以幫助你快速、簡單的開發出一個網絡應用,相當於簡化和流程化了 NIO 的開發過程
Netty 是目前最流行的 NIO 框架,Netty 在互聯網領域、大數據分佈式計算領域、遊戲行業、通信行業等獲得了廣泛的應用,知名的 Elasticsearch 、Dubbo 框架內部都採用了 Netty。
4.3 Netty 的優點
Netty 對 JDK 自帶的 NIO 的 API 進行了封裝,解決了上述問題。
-
設計優雅:適用於各種傳輸類型的統一 API 阻塞和非阻塞 Socket;基於靈活且可擴展的事件模型,可以清晰地分離關注點;高度可定製的線程模型 - 單線程,一個或多個線程池.
-
使用方便:詳細記錄的 Javadoc,用戶指南和示例;沒有其他依賴項,JDK 5(Netty 3.x)或 6(Netty 4.x)就足夠了。
-
高性能、吞吐量更高:延遲更低;減少資源消耗;最小化不必要的內存複製。
-
安全:完整的 SSL/TLS 和 StartTLS 支持。
-
社區活躍、不斷更新:社區活躍,版本迭代週期短,發現的 Bug 可以被及時修復,同時,更多的新功能會被加入
4.4 Netty 版本說明
-
netty 版本分爲 netty3.x 和 netty4.x、netty5.x
-
因爲 Netty5 出現重大 bug,已經被官網廢棄了,目前推薦使用的是 Netty4.x 的穩定版本
-
目前在官網可下載的版本 netty3.x netty4.0.x 和 netty4.1.x
-
在本套課程中,我們講解 Netty4.1.x 版本
-
netty 下載地址: https://bintray.com/netty/downloads/netty/