Netty的深入浅出--55.Netty中Channel与ChannelPipeline的分析

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

 

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_37909508/article/details/91412338