channel对象代表的是一个与客户端连接的对象
查看channel的doc说明:
下面这个是通过mac系统将上面的转换过来的(其实没啥区别,只是下面的看起来比较直观):
它是一个连接到network socket 以及完成io操作的读、写、连接和绑定。
提供的功能
channel当前的状态(open 或者connected)
channel的配置参数(receive buffer size)
提供了I/O操作(例如:read ,write,connet,bind)
与当前channel所关联的channelPipeline处理所有的I/O事件和请求。
所有的IO操作都是异步的
这就意味着一些IO调用将会被立即返回,但是不能保证这整个调用已经完成。
相反,它会返回一个ChannelFuture实例来通知你请求的IO操作有没有成功、失败或者取消。(ChannelFuture所拿到的返回状态是一个最终的状态)
channel是可继承的
channel可以有一个父类,就比如说:一个ServerSocketChannel是SocketChannel父类,通过调用parent()方法返回ServerSocketChannel。
从这里可以看到channel是一个具体层次结构的类。
释放资源:
但现在位置Channel分析结束,我们开始分析ChannelPipeline.
我们要考虑到,ChannelPipeline肯定和Channel是有联系的,根据我们之前对netty的分析,我们可以知道ChannelPipeline肯定在Channel里面。
我们可以看到RegFuture.channel()之后直接获取了对象,说明channel是在initAndRegister()里面被创建出来的。
它是通过channelFactory工厂来创建的实例
我们进来之后发现我们创建的就是NioServerSocketChannel.class
总结:其实NioServerSocketChannel本身就是一个channel对象,它通过反射的方式来生成channel对象。
然后赋值给了它
然后就传入到init(channel)中:
它这里面主要就是处理器ServerBootstrapAcceptor的创建
不过我们现在的重点是分析pipeline