Netty是由JBOSS提供的一個Java開源框架。Netty提供異步的、事件驅動的網絡應用程序框架和工具,用以快速開發高性能、高可靠性的網絡服務器和客戶端程序。react
也就是說,Netty 是一個基於NIO的客戶、服務器端編程框架,使用Netty 能夠確保你快速和簡單的開發出一個網絡應用,例如實現了某種協議的客戶,服務端應用。Netty至關簡化和流線化了網絡應用的編程開發過程,例如,TCP和UDP的socket服務開發。apache
「快速」和「簡單」並不意味着會讓你的最終應用產生維護性或性能上的問題。Netty 是一個吸取了多種協議的實現經驗,這些協議包括FTP,SMTP,HTTP,各類二進制,文本協議,並通過至關精心設計的項目,最終,Netty 成功的找到了一種方式,在保證易於開發的同時還保證了其應用的性能,穩定性和伸縮性.
Mina是有apache開發的幫助用戶開發高性能和高伸縮網絡應用程序的框架。它經過Java nio技術基於TCP/IP和UDP/IP協議提供了抽象的、事件驅動的、異步的API。
Netty與Mina的比較:編程
Netty Core是Netty核心內容,它包括事件模型、通用API和Zero Copy功能。是上層功能的基礎,由Core能夠構建不一樣的應用服務。
Protocol Support提供了多種協議的編解碼包括HTTP、二進制和Google Protobuf等等,它們經過Codec Framework進行整合。
Transport Support提供了基本的NIO和BIO傳輸實現,是Netty網絡通訊的基礎。
Security Support不光提供了通訊層的安全保障(好比SSL/TLS),還在應用層提供瞭解決OOM的方案。
Container Integration是能夠應用於其餘主流開發框架的集合,經過它能夠和Spring、OSGi進行快速集成,爲快速使用Netty提供基礎支撐。
該層的主要職責是監聽網絡的讀寫和鏈接操做,負責將網絡層的數據讀取到內存緩衝區中,而後觸發各類網絡事件,例如鏈接建立、鏈接激活、讀事件、寫事件等等。將這些事件觸發到PipeLine中,由PipeLine管理的職責鏈來後續進行處理。
PipeLine是職責鏈ChannelPipeLine,它負責事件在職責鏈中的有序傳播,同時負責動態的編排職責鏈。職責鏈能夠選擇監聽和處理本身關心的事件,它能夠攔截處理和向後/向前傳播事件。不一樣應用的Handler節點的功能也不一樣,一般狀況下,每每會開發編解碼Handler用於消息的編解碼,它能夠將外部的協議消息轉換成內部的POJO對象,這樣上層業務則只須要關心處理業務邏輯便可,不須要感知底層的協議差別和線程模型差別,實現層面的分層隔離。
業務邏輯編排層一般有兩類:一類是純粹的業務邏輯編排,還有一類是其餘的應用層協議插件,用於特定協議相關的會話和鏈路管理。
架構的不一樣層面,須要關心和處理的對象都不一樣,一般狀況下,對於業務開發者,只須要關心職責鏈的攔截和業務Handler的編排,由於應用層協議棧每每是開發一次,處處運行,實際上對於業務開發者來講,只須要關心服務層的業務邏輯開發便可。各類應用協議以插件的形式提供,只有協議開發人員須要關注協議插件,對於其餘業務開發人員來講,只須要關心業務邏輯定製便可。這種分層的架構設計理念實現了NIO框架各層之間的解耦,便於上層業務協議棧的開發和業務邏輯的定製。
正是因爲Netty的分層架構設計合理,基於Netty的各類應用服務器和協議棧開發纔可以如雨後春筍般獲得快速發展。數組
性能是設計出來的,而不是測試出來的安全
鏈路有效性檢測服務器
心跳機制進行檢測:空閒時檢測,事件通知網絡
內存保護機制架構
計數器、重用、上限併發
優雅停機框架
在互聯網中的應用:Dubbo
提供異步、高性能的NIO的通訊框架
NIO客戶端和服務端
心跳檢測能力
斷連重連機制
流量控制
Dubbo協議的編解碼
大數據領域的應用:Apache Avro
提供異步、高性能的NIO的通訊框架
NIO客戶端和服務端
心跳檢測能力
斷連重連機制
流量控制
遊戲服務器的應用
爲各進程提供高性能的異步網絡通訊能力
自定義協議的編解碼
心跳檢測、流量整形、日誌統計
SSL、黑白名單
內存池技術保證最大限度重用對象
深刻的技術演進
活躍的社區
最後的提交在兩小時前
明確的Road Map
4.x
5.x