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连接.