Fork me on GitHub

Netty中的Channel的分类

Netty中Channel的分类

NioServerSocketChannel

服务端启动时,Netty拿到NioServerSocketChannel.class类,通过反射创建的。这就是服务端的Channel。

NioSocketChannel

我们在新连接接入时,通过new关键词创建NioCocketChannel,这个是客户端Channel,在其中我们会碰到Unsafe类

Channel的层级关系

Channel

它主要是网络的一个Socket,关于读写,连接,绑定最顶级的抽象

AbstractChannel

是对Channel抽象的实现,所有channel的抽象都会通过这个抽象类来实现,这个类是一个骨架的实现,定义有ChannelId、Unsafe、pipeline、eventLoop都是这个类抽象出来的,

AbstractNioChannel

这个类主要负责和Nio关系的Channel,主要通过Selector的方式进行读写事件的监听,里面有个SelectionKey,无论服务端、客户端的channel注册后都会得到一个SelcetionKey,这个SelectableChannel主要保存服务端客户端jdk的channel,看的构造方法,保存jdk底层channel以及读事件,和设置非阻塞模式。

NioServerSocketChannel(服务端Channel)

这个是服务端channel,我们进入它的构造方法,进入父类,

父类Channel(AbstractNioMessageChannel),在进入父类

进入到了AbstractNioChannel。

NioSocketChannel(客户端Channel)

这个是客户端Channel,我们进入它的构造方法,进入它的父类

父类Channel是AbstractNioByteChannel,这里是传readInterestOp,是read事件,说明客户端侧重的是数据的读写,我们在进入它的父类

进入到了AbstractNioChannel。

NioByteUnsafe

是由AbstractNioByteChannel创建进入它的read方法,是读取bytes

NioMessageUnsafe

是由AbstractNioMessageChannel创建,跟这一个read事件,主要是读取一个accept连接.

ChannelConfig的层级关系