netty源码:(30)channel的writeAndFlush和channelHandlerContext的writeAndFlush有什么区别?

2023-12-21 17:49:08

Channel的writeAndFlush方法(位于AbstractChannel类)代码如下:
在这里插入图片描述
它会调用hannelPipeline的writeAndFlush方法,该方法(位于DefaultChannelPipeline类)代码如下:
在这里插入图片描述
从上图可以看出,它是从ChannelPipeline的尾部来开始调用writeAndFlush方法的,所以消息会流经所有的ChannelOutboundHandler.
上面的tail是DefaultChannelPipeline里定义的成员变量,表示整个ChannelHandlerContext链表的尾部。
在这里插入图片描述

########################################################

而ChannelHandlerContext的代码如下(位于AbstractChannelHandlerContext类)
在这里插入图片描述
其中调用的重载方法代码如下:
在这里插入图片描述
其中调用的write方法代码如下:
在这里插入图片描述
其中会调用findContextOutbound来寻找下一个要处理消息的ChannelOutboundHandler.
findContextOutbound代码如下:
在这里插入图片描述
可以看到下一个将要处理的将是在ChannelPipeline中当前ChannelHandlerContext之前的那个ChannelOutboundHandler.

#######################################
结论:
调用channel的writeAndFlush,消息会被所有的ChannalOutboundHandler处理,而调用channelHandlerContext的writeAndFlush方法,消息只会被当前handler上游的ChannelOutboundHandler处理

文章来源:https://blog.csdn.net/amadeus_liu2/article/details/135133610
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。