深刻了解Netty【七】Netty核心組件


一、Bootstrap與ServerBootstrap

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

二、Future與ChannelFuture

Netty中的操做都是異步的,等待完成或者註冊監聽。如:bootstrap

//b爲ServerBootstrap實例
 ChannelFuture f = b.bind().sync();

三、Channel

  • Netty網絡通訊的組件,用於網絡IO操做。
  • 經過Channel能夠得到當前王略鏈接的通道的狀態與網絡配置參數。
  • Channel提供異步的網絡IO操做,調用後當即返回ChannelFuture,經過註冊監聽,或者同步等待,最終獲取結果。

Channel根據不一樣的協議、不一樣的阻塞類型,分爲不一樣的Channel類型: channel.png網絡

經過名稱也能大概猜出來其分別的做用。異步

四、Selector

Netty基於java.nio.channels.Selector對象實現IO多路複用,經過Selector一個線程能夠監聽多個鏈接的Channel事件。當向一個Selector中註冊Channel後,Selector內部的機制就能夠自動不斷的Select這些註冊的Channel是否有就緒的IO事件(可讀、可寫、網絡鏈接完成等)。oop

五、ChannelHandler

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

ChannelHanlder.png

六、Pipeline與ChannelPipeline

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

一個 Channel 包含了一個 ChannelPipeline,而 ChannelPipeline 中又維護了一個由 ChannelHandlerContext 組成的雙向鏈表,而且每一個 ChannelHandlerContext 中又關聯着一個 ChannelHandler。 channelpipeline.jpg3d

七、ChannelHandlerContext

保存Channel相關的全部上下文信息,同時關聯一個ChannelHandler。code

八、ChannelOption

Netty建立Channel實例後,能夠經過ChannelOption設置參數。對象

九、NioEventLoop與NioEventLoopGroup

NioEventLoopGroup能夠理解爲線程池,NioEventLoop理解爲一個線程,每一個EventLoop對應一個Selector,負責處理多個Channel上的事件。 ServerwithtwoEventLoopGroups.jpgblog

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

tencent.jpg

相關文章
相關標籤/搜索