天天看點

Netty簡單概述Netty概述

  本文開始給大家介紹Netty相關的内容,本篇主要介紹的是Netty概念性相關的内容

Netty概述

1. 原生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 版本該問題仍舊存在,沒有被根本解決。

2.官網說明

官網:

https://netty.io/
Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients
Netty簡單概述Netty概述
  1. Netty 是由 JBOSS 提供的一個 Java 開源架構。Netty 提供

    異步

    的、

    基于事件驅動

    的網絡應用程式架構,用以快速開發高性能、高可靠性的網絡 IO 程式
  2. Netty 可以幫助你快速、簡單的開發出一個網絡應用,相當于簡化和流程化了 NIO 的開發過程
  3. Netty 是目前最流行的 NIO 架構,Netty 在網際網路領域、大資料分布式計算領域、遊戲行業、通信行業等獲得了廣泛的應用,知名的 Elasticsearch 、Dubbo 架構内部都采用了 Netty。

3. Netty的優點

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

  1. 設計優雅:适用于各種傳輸類型的統一 API 阻塞和非阻塞 Socket;基于靈活且可擴充的事件模型,可以清晰地分離關注點;高度可定制的線程模型 - 單線程,一個或多個線程池.
  2. 使用友善:詳細記錄的 Javadoc,使用者指南和示例;沒有其他依賴項,JDK 5(Netty 3.x)或 6(Netty 4.x)就足夠了。
  3. 高性能、吞吐量更高:延遲更低;減少資源消耗;最小化不必要的記憶體複制。
  4. 安全:完整的 SSL/TLS 和 StartTLS 支援。
  5. 社群活躍、不斷更新:社群活躍,版本疊代周期短,發現的 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/