Netty

Channel Sockets
EventLoop Control flow, multithreading, concurrency
ChannelFuture Asynchronous notification
–Netty in Action

Channel

在java中,基础I/O操作的依赖的基石就是Socket,而Channel就是提供了一组API,极大的化简了对Socket的操作。

EventLoop

EventLoop处理一个Connection生命周期内的所有事件。
几个概念间的关系:
EventLoopGroup包含一个或者多个EventLoop;
EventLoop会绑定一个Thtread。
一个Channel会注册到一个EventLoop上。
一个EventLoop可能会被分配给多个Channel。

因为I/O操作在Netty中,都是异步的,没有一个操作可以立即返回。所以需要ChannelFuture。

ChannelHandler

ChannelHandler:是应用开发者最关注的,它被网络事件触发。处理inbound,outbound数据。
ChannelPipeline:包含一连串的ChannelHandler。而且,当Channel被创建时,就会被指定一个ChannelPipeline。细节:ChannelInitializer会负责安装一系列的ChannelHandler到Pipeline中。
Event顺着ChannelPipeline流动,中间经过一个个的ChannelHandler。PipeLine是双向流动的,所以会有两种ChannelHandler:ChannelInboundHandler 和 ChannelOutboundHandler。
ChannelHandlerContext保存着ChannelHandler和ChannelPipeline的绑定关系。
Adapter:ChannelhandlerAdapter是包含了基础实现的ChannelHandler。
Encoders 和 Decoders:netty提供了很多这样的抽象类,它们都是ChannelHandler。

服务端,需要两套Channels,既两个EventLoopGroup。其中一个与ServerChannle相关联,里面的EventLoop负责为到来的l连接请求创建Channel,一旦这个channel被创建,另外一个EventLoopGroupj就会分配一个EventLoop,来和这个channel绑在一起。

参考: http://owvvyywxv.bkt.clouddn.com/nio.pdf