前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ChannelHandlerContext

ChannelHandlerContext

作者头像
用户1418372
发布2018-10-11 14:37:02
4820
发布2018-10-11 14:37:02
举报
文章被收录于专栏:清晨我上码清晨我上码

ChannelHandlerContext代表了一个ChannelHandler和ChannelPipeline之间的关系,ChannelHandlerContext创建于ChannelHandler被载入到ChannelPipeline的时候,ChannelHandlerContext主要功能是管理在同一ChannelPipeline中各个ChannelHandler的交互

ChannelHandlerContext,Channel,ChannelPipeline提供的一些方法,下图时三者者之间的关系

图片.png

关于ChannelHandlerContext 的write方式有三种 其一通过:ChannelHandlerContext .channel 的write方法 其二通过:ChannelHandlerContext.pipeline的write方法 其三通过:继承接口ChannelOutboundInvoker的write方法

代码语言:javascript
复制
一二方法相似:通过Channel或者ChannelPipeline调用write方法都会使事件沿着管道传播,这点很重要的,从一个Channel到下一个Channel的移动是由ChannelHandlerContext管控的。

第三种方法:当需要在ChannelPipeline中的某些具体的地方开始传播一个事件,就需要用到第三种
这样做的好处:减少事件在那些对该事件不感兴趣的处理器传播的损耗。防止那些“感兴趣”的处理器处理后产生不好的影响

ChannelHandlerContext 类

代码语言:javascript
复制
public interface ChannelHandlerContext extends AttributeMap, ChannelInboundInvoker, ChannelOutboundInvoker {

    Channel channel();
    ChannelHandlerContext read();

    ChannelHandlerContext flush();

    ChannelPipeline pipeline();

    ByteBufAllocator alloc();
//其他省略

}
  • 注意:一点因为一个ChannelHandler可以属于多个ChannelPipeline,它也可以绑定多个ChannelHandlerContext实例,如果一个ChannelHandler想要有这样的功能,就必须以@Sharable注解注释这个ChannelHandler,否则,尝试将其加入到不止一个ChannelPipeline中去的时候,会报出异常,很明显,使用这样的支持多线程的channel你必须保证该类是线程安全的,无状态的
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.10.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档