Netty是什么?它能干什么?


Netty

異步事件驅動的網絡應用程序框架。

特點

  • 高並發
    • 通過Reactor模型基於NIO開發的網絡通信框架 
  • 傳輸快
    • 零拷貝
      • Netty的接受和發送bytebuffer使用堆外直接內存進行socket讀寫,傳統堆內存進行socket讀寫,JVM將堆內存buffer拷貝到內存,然后寫入socket。相比之下,消息在發送多了一次緩沖區的內存拷貝。 
      • Netty提供buffer,聚合多個bytebuffer。傳統通過內存拷貝將多個小buffer合並大的buffer。
      • Netty文件傳輸使用transferto,直接將文件緩沖區的數據發送到目標channel。傳統通過循環write導致內存拷貝。  
  • 使用簡單
    • 封裝NIO,提供調用接口
  • 功能強大
    • 預置多種編解碼功能
    • 支持多種主流協議
    • 通過channelhandler對通信框架擴展
  • 性能高
    • IO線程模型
    • 內存零拷貝
    • 內存池設計
    • 串行化處理讀寫
    • 高性能序列化協議 
  • 穩定
    • 修復所有NIO bug
      • epoll bug,導致selector空輪詢,最終導致CPU100% 

應用場景

  • RPC框架實現的基礎通信組件,用於各進程節點間的內部通信
  • 定制私有協議棧,Netty提供TCP/UDP和HTTP協議棧
  • 跨界點通信

發送消息方式

  • 直接寫入channel,消息從channelpipeline的尾部移動
  • 寫入channelhandler綁定的channelhandlercontext,消息從channelpipeline的下一個channelhandler移動

 事件驅動模型

  • 輪詢
  • 事件驅動方式。boss線程和work線程,boss線程把事件放入事件隊列,work線程消費事件隊列中的事件,調用對應的handler處理事件。

Reactor線程模型

單Reactor單線程

單Reactor多線程

一個線程負責監聽服務端,接受客戶端TCP連接請求;一個線程同時處理多條鏈路,一個鏈路只對應一個線程

主從Reactor多線程

服務器Netty工作架構

每個端口對應一個boss線程


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM