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