Netty源码_ChannelPipeline和ChannelHandlerContext详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty源码_ChannelPipeline和ChannelHandlerContext详解相关的知识,希望对你有一定的参考价值。

参考技术A ChannelPipeline 相当于 ChannelHandler 的集合,用于处理或拦截 Channel 的入站事件和出站操作。

这里就有两个问题:

ChannelPipeline 管理 ChannelHandler 集合,是利用 ChannelHandler 创建一个上下文对象 ChannelHandlerContext , 而 ChannelPipeline 存储的就是这个上下文对象。
这个 ChannelHandlerContext 对象下一节将重点讲解。

ChannelPipeline 管理的 ChannelHandler 集合处理 I/O 事件的流程图如下:

可以看出 ChannelPipeline 将管理的 ChannelHandler 分为两种:

不要看 ChannelPipeline 方法很多,其实主要分为两类:

你会发现每个添加方法都有多一个 EventExecutorGroup 参数的对应方法,它作用是什么呢?

在 ChannelPipeline 实现中:

你会发现 ChannelPipeline 的主要功能就两个:

上下文 ChannelHandlerContext 接口与 ChannelPipeline 联系非常大

ChannelHandlerContext 接口的重要作用:

ChannelHandlerContext 的功能大概分为两类:

Netty 之 ChannelPipeline

Channel

Channel是Netty的核心接口之一,Netty通过Channel操作socket,一个Channel就是操作一个socket的通道。


ChannelHandler

用Netty进行网络编程时,很少直接操作Channel,而是通过ChannelHandler来间接操纵Channel。


ChannelPipeline

每个Channel都有一个自己的ChannelPipline(感觉叫ChannelHandlerPipeline更合适),ChannelPipeline有一个管理ChannelHandler的双向链表。当需要对Channel做某种处理时,Pipeline依次调用ChannelHandler进行处理。

DefaultChannelPipeline是ChannelPipeline的默认实现。



ChannelHandlerContext

ChannelPipeline并不直接管理ChannelHandler,而是通过ChannelHandlerContext间接进行管理。DefaultChannelHandlerContext是ChannelHandlerContext的默认实现。 


Netty 之 ChannelPipeline(1)


从代码中可以看出,DefaultChannelPipeline有两个特殊的ChannelHandlerContext,分别是head和tail,它们是维护ChannelHandler双向链表的头和尾。


关系图

它们之间的关系图如下所示: 


---------------------------------

你不扫一下吗



以上是关于Netty源码_ChannelPipeline和ChannelHandlerContext详解的主要内容,如果未能解决你的问题,请参考以下文章

Netty源码之——ChannelPipeline

netty的ChannelPipeline执行顺序对inBound和outBound执行器造成的影响

Netty 之 ChannelPipeline

Netty实战六之ChannelHandler和ChannelPipeline

Netty中的ChannelPipeline

netty之channelPipeline