1. 程式人生 > 其它 >netty 理論和認識

netty 理論和認識

Netty 是一個非同步事件驅動的網路應用框架,用於快速開發可維護的高效能伺服器和客戶端。

簡單地說Netty封裝了JDK的NIO

 

 

BIO:【消耗大,同步的....】

 

 

NIO 【JDK1.4後出現的】:【非同步的】【單執行緒 輕快!】

 

 

 

AIO 相當於NIO 2.0 : 【非同步非阻塞IO(監聽) 和 非同步阻塞IO(非常傻的方法)】

 

 

  

 

 

 

 

 

 

 




 

Netty - Reactor 執行緒模型

單執行緒模型:所有IO操作都由同一個NIO執行緒處理的。

多執行緒模型:由一組NIO執行緒處理IO操作。

主從執行緒模型:一組執行緒池接受請求,一組執行緒池處理IO

 

Netty 核心元件

1. Channel
​ Channel是 Java NIO 的一個基本構造。可以看作是傳入或傳出資料的載體。因此,它可以被開啟或關閉,連線或者斷開連線。

EventLoop 與 EventLoopGroup
​ EventLoop 定義了Netty的核心抽象,用來處理連線的生命週期中所發生的事件,在內部,將會為每個Channel分配一個EventLoop。
​ EventLoopGroup 是一個 EventLoop 池,包含很多的 EventLoop。
​ Netty 為每個 Channel 分配了一個 EventLoop,用於處理使用者連線請求、對使用者請求的處理等所有事件。EventLoop 本身只是一個執行緒驅動,在其生命週期內只會繫結一個執行緒,讓該執行緒處理一個 Channel 的所有 IO 事件。
​ 一個 Channel 一旦與一個 EventLoop 相繫結,那麼在 Channel 的整個生命週期內是不能改變的。一個 EventLoop 可以與多個 Channel 繫結。即 Channel 與 EventLoop 的關係是 n:
1,而 EventLoop 與執行緒的關係是 1:1
ServerBootstrap 與 Bootstrap ​Bootstarp 和 ServerBootstrap 被稱為引導類,指對應用程式進行配置,並使他執行起來的過程。Netty處理引導的方式是使你的應用程式和網路層相隔離。 ​Bootstrap 是客戶端的引導類,Bootstrap 在呼叫 bind()(連線UDP)和 connect()(連線TCP)方法時,會新建立一個 Channel,僅建立一個單獨的、沒有父 Channel 的 Channel 來實現所有的網路交換。 ​ServerBootstrap 是服務端的引導類,ServerBootstarp 在呼叫 bind() 方法時會建立一個 ServerChannel 來接受來自客戶端的連線,並且該 ServerChannel 管理了多個子 Channel 用於同客戶端之間的通訊。
ChannelHandler 與 ChannelPipeline ​ChannelHandler 是對 Channel 中資料的處理器,這些處理器可以是系統本身定義好的編解碼器,也可以是使用者自定義的。這些處理器會被統一新增到一個 ChannelPipeline 的物件中,然後按照新增的順序對 Channel 中的資料進行依次處理。
ChannelFuture ​ Netty 中所有的 I
/O 操作都是非同步的,即操作不會立即得到返回結果,所以 Netty 中定義了一個 ChannelFuture 物件作為這個非同步操作的“代言人”,表示非同步操作本身。如果想獲取到該非同步操作的返回值,可以通過該非同步操作物件的addListener() 方法為該非同步操作新增監 NIO 網路程式設計框架 Netty 聽器,為其註冊回撥:當結果出來後馬上呼叫執行。 ​ Netty 的非同步程式設計模型都是建立在 Future 與回撥概念之上的。

————————————————
版權宣告:本文為CSDN博主「敖 丙」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/qq_35190492/article/details/113174359

 

 

 

 

 

 

!轉載請附上原連結!