Netty 幾個重要的核心組件

爲了瞭解Netty的工作原理,對Netty的內部設計有一個總體瞭解是很有用的。幾個核心概念:

Bootstrap

EventLoopGroup

EventLoop

SocketChannel

ChannelInitializer

ChannelPipeline

ChannelHandler

 

這些概念如何相互關聯如下所示:

overview-0.png

 

Bootstrap

Netty中的Bootstrap類負責引導,引導過程包括啓動線程,打開套接字等。

 

EventLoopGroup

Netty EventLoopGroup是EventLoop的分組,多個EventLoop可以組合在一起,這樣,EventLoop可以共享一些資源。

 

EventLoop

Netty EventLoop是一個事件循環,例如網絡套接字(來自SocketChannel)傳入數據。當發生事件時,該事件將傳遞到適當的事件處理程序,例如ChannelHandler。

 

SocketChannel

Netty SocketChannel表示通過網絡與另一臺計算機的TCP連接。無論你是將Netty用作客戶端還是服務器,與網絡上其它計算機交換的所有數據都將通過SocketChannel實例傳遞,該實例表示計算機之間的TCP連接。 SocektChannel由EventLoop管理,並且始終僅由相同的EventLoop管理。由於EventLoop始終由同一線程執行,因此SocketChannel實例也只能由同一線程訪問。因此,從SocketChannel讀取數據時,不必擔心同步問題。

 

ChannelInitializer

Netty ChannelInitializer是一個特殊的ChannelHandler,在創建SocketChannel時,它將附加到SocketChannel的ChannelPipeline。然後調用ChannelInitializer,以便它可以初始化SocketChannel。 初始化SocketChannel後,ChannelInitializer會將其自身從ChannelPipeline中刪除。

 

ChannelPipeline 

每個Netty SocketChannel都有一個ChannelPipeline。 ChannelPipeline包含ChannelHandler實例的列表。當EventLoop從SocketChannel讀取數據時,數據將傳遞到ChannelPipeline中的第一個ChannelHandler。第一個ChannelHandler處理數據,可以選擇將其轉發到ChannelPipeline中的下一個ChannelHandler,然後,該處理程序也可以選擇將其轉發至ChannelPipeline中的下一個ChannelHandler等。 當將數據寫到SocketChannel時,在最終寫入SocketChannel之前,寫入的數據還將通過ChannelPipeline傳遞。

 

ChannelHandler 

Netty ChannelHandler處理從Netty SocketChannel接收的數據。 ChannelHandler還可以處理正在寫到SocketChannel的數據。

 

原文地址: https://www.zhblog.net/go/java/tutorial/java-netty-overview?t=598

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章