本文開始給大家介紹Netty相關的内容,本篇主要介紹的是Netty概念性相關的内容
Netty概述
1. 原生NIO存在的問題
- NIO 的類庫和 API 繁雜,使用麻煩:需要熟練掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。
- 需要具備其他的額外技能:要熟悉 Java 多線程程式設計,因為 NIO 程式設計涉及到 Reactor 模式,你必須對多線程和網絡程式設計非常熟悉,才能編寫出高品質的 NIO 程式。
- 開發工作量和難度都非常大:例如用戶端面臨斷連重連、網絡閃斷、半包讀寫、失敗緩存、網絡擁塞和異常流的處理等等。
- JDK NIO 的 Bug:例如臭名昭著的 Epoll Bug,它會導緻 Selector 空輪詢,最終導緻 CPU 100%。直到 JDK 1.7 版本該問題仍舊存在,沒有被根本解決。
2.官網說明
官網:
https://netty.io/Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iMyQDN3ITOmRzNwU2M3YTOwImY0gTM1kTZkVjMkBjY38CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
- Netty 是由 JBOSS 提供的一個 Java 開源架構。Netty 提供
的、異步
的網絡應用程式架構,用以快速開發高性能、高可靠性的網絡 IO 程式基于事件驅動
- Netty 可以幫助你快速、簡單的開發出一個網絡應用,相當于簡化和流程化了 NIO 的開發過程
- Netty 是目前最流行的 NIO 架構,Netty 在網際網路領域、大資料分布式計算領域、遊戲行業、通信行業等獲得了廣泛的應用,知名的 Elasticsearch 、Dubbo 架構内部都采用了 Netty。
3. Netty的優點
Netty 對 JDK 自帶的 NIO 的 API 進行了封裝,解決了上述問題。
- 設計優雅:适用于各種傳輸類型的統一 API 阻塞和非阻塞 Socket;基于靈活且可擴充的事件模型,可以清晰地分離關注點;高度可定制的線程模型 - 單線程,一個或多個線程池.
- 使用友善:詳細記錄的 Javadoc,使用者指南和示例;沒有其他依賴項,JDK 5(Netty 3.x)或 6(Netty 4.x)就足夠了。
- 高性能、吞吐量更高:延遲更低;減少資源消耗;最小化不必要的記憶體複制。
- 安全:完整的 SSL/TLS 和 StartTLS 支援。
- 社群活躍、不斷更新:社群活躍,版本疊代周期短,發現的 Bug 可以被及時修複,同時,更多的新功能會被加入
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/