Essential Netty in Action學(xué)習(xí)(二)

Netty中必須清楚了解的幾個組件:

  • bootstrap

Netty應(yīng)用程序是以bootstrap開始,所以他是入口,為用于應(yīng)用網(wǎng)絡(luò)層配置提供的容器.

  • channel

底層網(wǎng)絡(luò)傳輸需要給I/O提供一個操作接口用于讀寫等操作,這個接口在Netty就是channel.他能給予我們有bind,close,read,write等操作.Netty中提供了大量的Channel實現(xiàn)類給我們使用,比如最常用的NioSocketChannel等.

  • channelHandler

channelHandler顧名思義渠道處理,是提供用于數(shù)據(jù)處理的容器.在channelHandler我們可以序列化,可以編碼解碼等等對數(shù)據(jù)進行的操作.
比如常用的ChannelINboundHandler,可以用于應(yīng)用邏輯,也可以從此從其中沖刷數(shù)據(jù).業(yè)務(wù)邏輯在一個或者多個channelInboundHandler中實現(xiàn).

  • channelPipeline

channelPipeline意思是渠道的管道,用于串聯(lián)多個channelHandler,管理著入站和出站.每個channel都有自己的channelPipeline.我們通過實現(xiàn)ChannelInitializer方法,把channelHandler都加到channelPipeline上,然后ChannelInitializer子類通過ServerBootstrap進行注冊.

  • eventLoop

eventLoop用于處理channel的I/O操作.一個eventLoopGroup包含一個或者多個eventLoop,一個eventLoop會處理多個Channel事件.


eventLoop.png

Netty 是一個非阻塞、事件驅(qū)動的網(wǎng)絡(luò)框架。Netty 實際上是使用 Threads(多線程)處理 I/O事件.Netty的設(shè)計保證程序處理事件不會有同步.圖中表示不需要在channel之間共享channelHandler實例的原因.
當創(chuàng)建一個 Channel,Netty 通過 一個單獨的 EventLoop 實例來注冊該Channel(并同樣是一個單獨的 Thread)的通道的使用壽命。這就是為什么你的應(yīng)用程序不需要同步 Netty 的I/O操作;所有 Channel 的 I/O 始終用相同的線程來執(zhí)行.

  • channelFuture

Netty所有的I/O操作都是一部的,因為一個操作可能無法立即返回,所以Netty提供了接口channelFuture,它的addListener方法注冊了一個ChannelFutureListener監(jiān)聽器,當操作完成時,就會被通知,我們可以在ChannelFutureListener中對于操作后的結(jié)果結(jié)果進行其他操作.無論操作是否成功,它肯定會被執(zhí)行.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容