初識netty

Netty是一個異步事件驅動的網絡應用程序框架,用於快速開發可維護的高性能協議服務器和客戶端。
Netty是一個NIO客戶端服務器框架,可以快速輕鬆地開發協議服務器和客戶端等網絡應用程序。它極大地簡化了TCP
和UDP套接字服務器等網絡編程。“快速簡單”並不意味着最終的應用程序會受到可維護性或性能問題的影響。Netty經過精心設計,具有豐富的協議,如FTP,SMTP,HTTP以及各種二進制和基於文本的傳統協議。 因此,Netty成功地找到了一種在不妥協的情況下實現易於開發,性能,穩定性和靈活性的方法。

特徵

設計

  • 適用於各種傳輸類型的統一API - 阻塞和非阻塞套接字
  • 基於靈活且可擴展的事件模型,可以清晰地分離關注點
  • 高度可定製的線程模型 - 單線程,一個或多個線程池,如SEDA詳情
  • 真正的無連接數據報套接字支持(自3.1起)【注①】

使用簡單

  • 詳細齊全的Javadoc,用戶指南和示例
  • 沒有其他依賴項,JDK 5(Netty 3.x)或6(Netty 4.x)就足夠了
          。注意:某些組件(如HTTP/2)可能有更多要求。有關更多信息,請參閱the Requirements page頁面。

性能

  • 高吞吐量,低延遲
  • 減少資源消耗
  • 最小化不必要的內存複製

安全

  • 完整的SSL/TLS和StartTLS支持

社區

  • 早發佈,經常發佈
  • 自2003年以來,作者一直在編寫類似的框架,他依然覺得你的反饋很珍貴!

框架圖

這裏寫圖片描述

傳輸服務

  • Socket & DatagramSocket
  • Http Tunnel(http隧道)
  • In-VM pipe(虛擬機內的管道)

協議支持

  • Http&WebSocket
  • SSL&StartTLS(加密協議)
  • Google Protobuf(google開源的序列化協議)
  • zlib/gzip Compression(壓縮格式)
  • LargeFile Transfer(支持大文件傳輸)
  • RTSP(位於應用層的多媒體 實時流傳輸協議)
  • Legacy Text.Binary Protocols with Unit Testability(傳統的文本。具有單元可測試性的二進制協議)

    核心

  • Extensible Event Model(可的擴展事件模型)
  • Universal Communication API(通用通信API)
  • Zero-Copy-Capable Rich Byte Buffer(具有零拷貝功能的富字節緩衝區)【注②】

註釋

①套接字分爲——面向連接的套接字和無連接的套接字

  • 面向連接的套接字:提供了一個面向連接、可靠的數據傳輸服務,數據傳輸之前需要在發送端與接收端之間建立可靠連接,確定雙方通信無礙。數據無差錯(不丟包)、無重複地發送,且按發送順序接收。內設流量控制,避免數據流超限(滑動窗口協議),數據被看作是字節流,無長度限制。TCP(傳輸控制協議)、FTP(文件傳送協議)即使用流式套接(SOCK_STREAM)。
  • 無連接的套接字:提供了一個無連接服務,發送方只需要知道接收方的的IP地址和端口號,就可以直接發數據包。但是,能不能到達就不知道了。數據包以獨立包形式被髮送,不提供無錯保證,數據可能丟失或重複,並且接收順序混亂。UDP(用戶數據報協議)、NFS(網絡文件系統)使用數據報式套接字(SOCK_DGRAM)。
    推薦閱讀5分鐘讀懂tcp協議
    ②Zero-Copy:指計算機執行操作時,CPU不需要先將數據從某處內存複製到另一個特定區域。這種技術通常用於通過網絡傳輸文件時節省CPU週期和內存帶寬。零複製操作減少了在用戶空間與內核空間之間切換模式的次數。(詳情)
    參考:
    https://netty.io/
    https://github.com/mdwelsh/mdwelsh.github.io/blob/master/papers/seda-sosp01.pdf
    ②:https://blog.csdn.net/qq_19408603/article/details/74612484
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章