ChannelHandlerContext

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

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

ChannelHandlerContext_第1张图片
图片.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)