首頁 Java java教程 基於NIO的Netty網路架構(圖文詳解)

基於NIO的Netty網路架構(圖文詳解)

Jun 25, 2017 am 10:22 AM
netty 基於 框架 網路

     Netty是一個高效能、非同步事件驅動的NIO框架,它提供了對TCP、UDP和檔案傳輸的支持,Netty的所有IO操作都是異步非阻塞的,透過Future-Listener機制,用戶可以方便的主動獲取或透過通知機制獲得IO操作結果。

Netty的優點有:

a、功能豐富,內建了多種資料編解碼功能、支援多種網路協定。

b、高效能,透過與其它主流NIO網路框架對比,它的綜合性能最佳。

c、可擴充性好,可透過它提供的ChannelHandler元件對網路通訊方​​面進行靈活擴充。

d、易用性,API使用簡單。

e、經過了許多商業應用的考驗,在網路、網路遊戲、大數據、電信軟體等眾多產業中成功商用。

Netty採用了典型的三層網路架構進行設計,邏輯架構圖如下:

第一層:Reactor通訊調度層。這層的主要職責就是監聽網路的連線和讀寫操作,負責將網路層的資料讀取到記憶體緩衝區中,然後觸發各種網路事件,例如連線建立、連線啟動、讀取事件、寫入事件等,將這些事件觸發到Pipeline中,然後由Pipeline充當的職責鏈來進行後續的處理。

 

第二層:職責鏈Pipeline層。負責事件在職責鏈中有序的向前(後)傳播,同時負責動態的編排職責鏈。 Pipeline可以選擇監聽處理自己關心的事件。

 

第三層:業務邏輯處理層,一般可分為兩類:a. 純粹的業務邏輯處理,例如日誌、訂單處理。 b. 應用層協定管理,例如HTTP(S)協定、FTP協定等。

 

我們都知道影響網路服務通訊效能的主要因素有:網路I/O模型、執行緒(進程)調度模型和資料序列化方式。

在網路I/O模型方面,Netty採用基於非阻塞I/O的實現,底層依賴的是JDKNIO框架的Selector。

在執行緒調度模型方面,Netty採用Reactor執行緒模型。常用的Reactor線程模型有三種,分別是:

a、Reactor單線程模型:Reactor單線程模型,指的是所有的I/O操作都在同一個NIO線程上面完成。對於一些小容量應用場景,可以使用單線程模型。

b、Reactor多執行緒模型:Rector多執行緒模型與單執行緒模型最大的差異就是有一組NIO執行緒處理I/O操作。主要用於高並發、大業務量情境。

c、主從Reactor多線程模型:主從Reactor線程模型的特徵是服務端用來接收客戶端連接的不再是單獨的NIO線程,而是獨立的NIO線程池。利用主從NIO執行緒模型,可以解決一個服務端監聽執行緒無法有效處理所有客戶端連線的效能不足問題。 Netty線程模型並非固定不變的,它可以支援三種Reactor線程模型。

在資料序列化方面,影響序列化效能的主要因素有:

a、序列化後的碼流大小(網路頻寬佔用)。

b、序列化和反序列化操作的效能(CPU資源佔用)。

c、並發呼叫時的效能表現:穩定性、線性成長等。

Netty預設提供了對GoogleProtobuf二進位序列化框架的支持,但透過擴展Netty的編解碼接口,可以實現其它的高性能序列化框架,例如Avro、Thrift的壓縮二進制編解碼框架。

 

以上是基於NIO的Netty網路架構(圖文詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1319
25
PHP教程
1269
29
C# 教程
1248
24
如何評估Java框架商業支援的性價比 如何評估Java框架商業支援的性價比 Jun 05, 2024 pm 05:25 PM

評估Java框架商業支援的性價比涉及以下步驟:確定所需的保障等級和服務等級協定(SLA)保證。研究支持團隊的經驗和專業知識。考慮附加服務,如昇級、故障排除和效能最佳化。權衡商業支援成本與風險緩解和提高效率。

PHP 框架的學習曲線與其他語言框架相比如何? PHP 框架的學習曲線與其他語言框架相比如何? Jun 06, 2024 pm 12:41 PM

PHP框架的學習曲線取決於語言熟練度、框架複雜性、文件品質和社群支援。與Python框架相比,PHP框架的學習曲線較高,而與Ruby框架相比,則較低。與Java框架相比,PHP框架的學習曲線中等,但入門時間較短。

Java框架的效能比較 Java框架的效能比較 Jun 04, 2024 pm 03:56 PM

根據基準測試,對於小型、高效能應用程序,Quarkus(快速啟動、低記憶體)或Micronaut(TechEmpower優異)是理想選擇。 SpringBoot適用於大型、全端應用程序,但啟動時間和記憶體佔用稍慢。

PHP 框架的輕量級選項如何影響應用程式效能? PHP 框架的輕量級選項如何影響應用程式效能? Jun 06, 2024 am 10:53 AM

輕量級PHP框架透過小體積和低資源消耗提升應用程式效能。其特點包括:體積小,啟動快,記憶體佔用低提升響應速度和吞吐量,降低資源消耗實戰案例:SlimFramework創建RESTAPI,僅500KB,高響應性、高吞吐量

golang框架文件最佳實踐 golang框架文件最佳實踐 Jun 04, 2024 pm 05:00 PM

編寫清晰全面的文件對於Golang框架至關重要。最佳實踐包括:遵循既定文件風格,例如Google的Go程式設計風格指南。使用清晰的組織結構,包括標題、子標題和列表,並提供導覽。提供全面且準確的信息,包括入門指南、API參考和概念。使用程式碼範例說明概念和使用方法。保持文件更新,追蹤變更並記錄新功能。提供支援和社群資源,例如GitHub問題和論壇。建立實際案例,如API文件。

如何為不同的應用場景選擇最佳的golang框架 如何為不同的應用場景選擇最佳的golang框架 Jun 05, 2024 pm 04:05 PM

根據應用場景選擇最佳Go框架:考慮應用類型、語言特性、效能需求、生態系統。常見Go框架:Gin(Web應用)、Echo(Web服務)、Fiber(高吞吐量)、gorm(ORM)、fasthttp(速度)。實戰案例:建構RESTAPI(Fiber),與資料庫互動(gorm)。選擇框架:效能關鍵選fasthttp,靈活Web應用選Gin/Echo,資料庫互動選gorm。

Java框架學習路線圖:不同領域中的最佳實踐 Java框架學習路線圖:不同領域中的最佳實踐 Jun 05, 2024 pm 08:53 PM

針對不同領域的Java框架學習路線圖:Web開發:SpringBoot和PlayFramework。持久層:Hibernate和JPA。服務端響應式程式設計:ReactorCore和SpringWebFlux。即時計算:ApacheStorm和ApacheSpark。雲端運算:AWSSDKforJava和GoogleCloudJava。

Golang框架學習過程中常見的迷思有哪些? Golang框架學習過程中常見的迷思有哪些? Jun 05, 2024 pm 09:59 PM

Go框架學習的迷思有以下5種:過度依賴框架,限制彈性。不遵循框架約定,程式碼難以維護。使用過時庫,帶來安全和相容性問題。過度使用包,混淆程式碼結構。忽視錯誤處理,導致意外行為和崩潰。

See all articles