Netty基本元件介紹
Netty做為一款用於搭建高效能網路應用程式的高階框架,由以下幾個主要構件組成:
一、Channel
Channel 是java IO/">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實戰》
Linux公社的RSS地址 : ofollow,noindex" target="_blank">https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址: https://www.linuxidc.com/Linux/2018-10/154815.htm