Netty中必须清楚了解的几个组件:
-
bootstrap
Netty应用程序是以bootstrap开始,所以他是入口,为用于应用网络层配置提供的容器.
-
channel
底层网络传输需要给I/O提供一个操作接口用于读写等操作,这个接口在Netty就是channel.他能给予我们有bind,close,read,write等操作.Netty中提供了大量的Channel实现类给我们使用,比如最常用的NioSocketChannel等.
-
channelHandler
channelHandler顾名思义渠道处理,是提供用于数据处理的容器.在channelHandler我们可以序列化,可以编码解码等等对数据进行的操作.
比如常用的ChannelINboundHandler,可以用于应用逻辑,也可以从此从其中冲刷数据.业务逻辑在一个或者多个channelInboundHandler中实现.
-
channelPipeline
channelPipeline意思是渠道的管道,用于串联多个channelHandler,管理着入站和出站.每个channel都有自己的channelPipeline.我们通过实现ChannelInitializer方法,把channelHandler都加到channelPipeline上,然后ChannelInitializer子类通过ServerBootstrap进行注册.
-
eventLoop
eventLoop用于处理channel的I/O操作.一个eventLoopGroup包含一个或者多个eventLoop,一个eventLoop会处理多个Channel事件.
Netty 是一个非阻塞、事件驱动的网络框架。Netty 实际上是使用 Threads(多线程)处理 I/O事件.Netty的设计保证程序处理事件不会有同步.图中表示不需要在channel之间共享channelHandler实例的原因.
当创建一个 Channel,Netty 通过 一个单独的 EventLoop 实例来注册该Channel(并同样是一个单独的 Thread)的通道的使用寿命。这就是为什么你的应用程序不需要同步 Netty 的I/O操作;所有 Channel 的 I/O 始终用相同的线程来执行.
-
channelFuture
Netty所有的I/O操作都是一部的,因为一个操作可能无法立即返回,所以Netty提供了接口channelFuture,它的addListener方法注册了一个ChannelFutureListener监听器,当操作完成时,就会被通知,我们可以在ChannelFutureListener中对于操作后的结果结果进行其他操作.无论操作是否成功,它肯定会被执行.