本文開始給大家介紹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
-
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/