1. 程式人生 > 程式設計 >深入瞭解Netty【七】Netty核心元件

深入瞭解Netty【七】Netty核心元件


1、Bootstrap與ServerBootstrap

bootstrap用於引導Netty的啟動,Bootstrap是客戶端的引導類,ServerBootstrap是服務端引導類。類繼承關係: bootstrap.png

2、Future與ChannelFuture

Netty中的操作都是非同步的,等待完成或者註冊監聽。如:

//b為ServerBootstrap例項
 ChannelFuture f = b.bind().sync();
複製程式碼

3、Channel

  • Netty網路通訊的元件,用於網路IO操作。
  • 通過Channel可以獲得當前王略連線的通道的狀態與網路配置引數。
  • Channel提供非同步的網路IO操作,呼叫後立即返回ChannelFuture,通過註冊監聽,或者同步等待,最終獲取結果。

Channel根據不同的協議、不同的阻塞型別,分為不同的Channel型別: channel.png

通過名稱也能大概猜出來其分別的作用。

4、Selector

Netty基於java.nio.channels.Selector物件實現IO多路複用,通過Selector一個執行緒可以監聽多個連線的Channel事件。當向一個Selector中註冊Channel後,Selector內部的機制就可以自動不斷的Select這些註冊的Channel是否有就緒的IO事件(可讀、可寫、網路連線完成等)。

5、ChannelHandler

ChannelHandler屬於業務的核心介面,用於處理IO事件或者攔截IO操作,並將其轉發到ChannelPipeline(業務處理鏈)中的下一個處理程式。 貼個實現類關係圖:

ChannelHanlder.png

6、Pipeline與ChannelPipeline

  • ChannelPipeline是一個handler的集合,它負責處理和攔截出站和入站的事件和操作。
  • ChannelPipeline實現了攔截過濾器模式,使使用者能控制事件的處理方式。
  • 在Netty中,每個Channel都有且只有一個ChannelPipeline與之對應。

一個 Channel 包含了一個 ChannelPipeline,而 ChannelPipeline 中又維護了一個由 ChannelHandlerContext 組成的雙向連結串列,並且每個 ChannelHandlerContext 中又關聯著一個 ChannelHandler。 channelpipeline.jpg

7、ChannelHandlerContext

儲存Channel相關的所有上下文資訊,同時關聯一個ChannelHandler。

8、ChannelOption

Netty建立Channel例項後,可以通過ChannelOption設定引數。

9、NioEventLoop與NioEventLoopGroup

NioEventLoopGroup可以理解為執行緒池,NioEventLoop理解為一個執行緒,每個EventLoop對應一個Selector,負責處理多個Channel上的事件。 ServerwithtwoEventLoopGroups.jpg

第一個boss EventLoopGroup分配一個EventLoop負責建立Channels傳入的連線請求。一旦連線接受,第二個work EventLoopGroup分配一個 EventLoop給它的Channel。

tencent.jpg