1. 程式人生 > 其它 >第四章—Netty:(1)Netty概述

第四章—Netty:(1)Netty概述

一、原生NIO存在的問題

(1) NIO 的類庫和 API 繁雜,使用麻煩:需要熟練掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。

(2)需要具備其他的額外技能:要熟悉 Java 多執行緒程式設計, 因為 NIO 程式設計涉及到 Reactor模式,你必須對多執行緒和網路程式設計非常熟悉,才能編寫出高質量的 NIO 程式。

(3)開發工作量和難度都非常大: 例如客戶端面臨斷連重連、 網路閃斷、 半包讀寫、 失敗快取、 網路擁塞和異常流的處理等等。

(4)JDK NIO 的 Bug:例如臭名昭著的 Epoll Bug,它會導致 Selector 空輪詢,最終導致 CPU 100%。 直到 JDK 1.7 版本該問題仍舊存在, 沒有被根本解決。

二、Netty 官網說明

官網:https://netty.io/

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients。

(1) Netty 是由 JBOSS 提供的一個 Java 開源框架。 Netty 提供非同步的、基於事件驅動的網路應用程式框架,用以快速開發高效能、高可靠性的網路 IO 程式。

(2)Netty 可以幫助你快速、簡單的開發出一個網路應用, 相當於簡化和流程化了 NIO 的開發過程。

(3)Netty 是目前最流行的 NIO 框架,Netty 在網際網路領域、 大資料分散式計算領域、遊戲行業、通訊行業等獲得了廣泛的應用,知名的 Elasticsearch、Dubbo 框架內部都採 用了 Netty。

三、Netty 的優點

Netty 對 JDK 自帶的 NIO 的 API 進行了封裝, 解決了上述問題。

(1)設計優雅: 適用於各種傳輸型別的統一 API 阻塞和非阻塞 Socket; 基於靈活且可擴充套件的事件模型,可以清晰地分離關注點; 高度可定製的執行緒模型 - 單執行緒,一個或多個執行緒池。

(2)使用方便:詳細記錄的 Javadoc,使用者指南和示例; 沒有其他依賴項,JDK 5(Netty3.x) 或 6(Netty 4.x) 就足夠了。

(3)高效能、吞吐量更高:延遲更低;減少資源消耗; 最小化不必要的記憶體複製。

(4)安全:完整的 SSL/TLS 和 StartTLS 支援。

(5)社群活躍、不斷更新:社群活躍,版本迭代週期短, 發現的 Bug 可以被及時修復,同時,更多的新功能會被加入。

四、Netty 版本說明

(1)netty版本分為 netty3.x 和 netty4.x、 netty5.x

(2)因為Netty5出現重大bug, 已經被官網廢棄了, 目前推薦使用的是Netty4.x的穩定版本。

(3)目前在官網可下載的版本 netty3.x netty4.0.x 和 netty4.1.x。

(4)在本套課程中, 我們講解 Netty4.1.x 版本

(5)netty 下載地址: https://bintray.com/netty/downloads/netty/