美文网首页
ChannelHandlerContext

ChannelHandlerContext

作者: 勃列日涅夫 | 来源:发表于2018-10-06 21:33 被阅读124次

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

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

    图片.png

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

    一二方法相似:通过Channel或者ChannelPipeline调用write方法都会使事件沿着管道传播,这点很重要的,从一个Channel到下一个Channel的移动是由ChannelHandlerContext管控的。
    
    第三种方法:当需要在ChannelPipeline中的某些具体的地方开始传播一个事件,就需要用到第三种
    这样做的好处:减少事件在那些对该事件不感兴趣的处理器传播的损耗。防止那些“感兴趣”的处理器处理后产生不好的影响
    

    ChannelHandlerContext 类

    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你必须保证该类是线程安全的,无状态的

    相关文章

      网友评论

          本文标题:ChannelHandlerContext

          本文链接:https://www.haomeiwen.com/subject/hzwuoftx.html