ChannelPipeline,ChannelHandler,ChannelHandlerContext关系及简要代码

ChannelPipeline,ChannelHandler,ChannelHandlerContext关系及简要代码

三者的关系

1.每当ServerSocket创建一个新的连接,就会创建一个Socket,对应的就是目标客户端。

2.每一个新创建的Socket都将会分配一个全新的ChannelPipeline

3.每一个ChannelPipeline内部都含有多个ChannelHnadlerContext

pipeline内部是双向链表。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MUCJBaY7-1594740081579)(C:\myboot\boot\note\images\pipeline,handler,context的关系.png)]

ChannelPipe

在这里插入图片描述

channelPipe提供添加channelhandler及一系列firexxx方法,defaultPipeline中fire系列的实现为找到head节点,调用其包装的handler(前面说过ctx就是包装的handler)xxx方法,而其handler的又会调用ctx.firexxx方法,此方法会找到pipeline中下一个ctx,如此往复,直到遍历完pipeline。所以我们要实现多个自定义handler传递时,记住在最后调用ctx.firexxx,才能传递下去。可以用fireChannelRead跟踪以下代码,验证是否上面说的那样。

ChannelHandlerContext

在这里插入图片描述

context提供了fireXXXf方法,

public ChannelHandlerContext fireChannelRead(final Object msg) {
       //  用于调用下一个ctx的handler的ChannelRead方法
        invokeChannelRead(findContextInbound(), msg);
        return this;
    }

ChannelHandler

这个就是我们在启动服务时设置的handler,启动时和新连接会将它添加到pipeline中(前文已经讲过).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值