天天看點

netty 理論和認識

Netty 是一個異步事件驅動的網絡應用架構,用于快速開發可維護的高性能伺服器和用戶端。

簡單地說Netty封裝了JDK的NIO

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

netty 理論和認識

NIO 【JDK1.4後出現的】:【異步的】【單線程 輕快!】

netty 理論和認識

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

netty 理論和認識
netty 理論和認識
netty 理論和認識

Netty - Reactor 線程模型

單線程模型:所有IO操作都由同一個NIO線程處理的。

多線程模型:由一組NIO線程處理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 與回調概念之上的。

      

繼續閱讀