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事件.

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í)行.