netty基本組件介紹
Netty做為一款用於搭建高性能網絡應用程序的高級框架,由以下幾個主要構件組成:
一、Channel
Channel 是java NIO的一個基本構造,可以把channel看作是傳入或者傳出的數據載體,可以被打開或者關閉,連接或者斷開連接。簡單來說其實就是我們平常網絡編程中經常使用的socket套接字對象。
二、EventLoop
EventLoop定義了Netty的核心對象,用於處理IO事件,多線程模型、並發。EventLoop及其相關的設計實現,我們這裏不做深入了解。只需要暫時了解以下幾點:
1、一個EventLoopGroup包含一個或者多個EventLoop;
2、一個EventLoop在它的生命周期內只和一個Thread綁定;
3、所有有EventLoop處理的I/O事件都將在它專有的Thread上被處理;
4、一個Channel在它的生命周期內只註冊於一個EventLoop;
5、一個EventLoop可能會被分配給一個貨多個Channel;
其實我們可以簡單的把EventLoop及其相關的實現NioEventLoop、NioEventLoopGroup等理解為netty針對我們網絡編程時創建的多線程進行了封裝和優化,構建了自己的線程模型。
三、ChannelHandler和ChannelPipeline
ChannelHandler其實就是用於負責處理接收和發送數據的的業務邏輯,Netty中可以註冊多個handler,以鏈式的方式進行處理,根據繼承接口的不同,實現的順序也不同。
1、ChannelInboundHandler:對接收的信息進行處理。一般用來執行解碼、讀取客戶端數據、進行業務處理等。如ByteToMessageDecoder;
2、ChannelOutboundHandler:對發送的信息進行處理,一般用來進行編碼、發送報文到客戶端。如MessageToByteEncoder;
而ChannelPipeline為ChannelHandler鏈提供了容器。
四、ByteBuf
網絡數據的操作歸根到底是字節的操作,Netty的ByteBuf做為一個強大高效的字節容器,提供了更加豐富的API用於字節的操作,同時保持了卓越的功能性和靈活性;
總結:
以上四個做為Netty的基本組件,可以理解為Netty把我們之前網絡編程中使用到的各部分都進行了優化和高性能的封裝,對比到實際的通信流程中,可以簡單的用下圖直觀的表示
本章參考資料:《Netty實戰》
netty基本組件介紹