ChannelHandlerContext

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android 研究

Android跨进程通信IPC之7——Binder相关结构体简介

binder_node 代表的是Binder实体对象,每一个service组件或者ServiceManager在Binder驱动程序中的描述,Binder驱动通...

13720
来自专栏扎心了老铁

hs_err_pid

hs_err_pid这种文件,是JVM出现错误时dump下来的。记录了错误发生当时: 1)JVM的状态参数 2)Linux的状态参数  就以下面的文件为例: #...

35290
来自专栏JavaQ

深入Spring Boot (三):Properties属性配置文件使用详解

2018年3月1日Spring官网正式对外发布了Spring Boot2.0正式版,新版本新增了很多新特性,使用上会更加便捷,所以《深入Spring Boot》...

66980
来自专栏码匠的流水账

使用proguard混淆java9代码

这里的例子仅仅还是jdk是模块化的,但是工程代码还没有模块化。等所有依赖都模块化了,可以重新试验一下。

51610
来自专栏JMCui

Netty 系列一(核心组件和实例).

    早期的 Java API 只支持由本地系统套接字库提供所谓的阻塞函数来支持网络编程。由于是阻塞 I/O ,要管理多个并发客户端,需要为每个新的客户端So...

11630
来自专栏安富莱嵌入式技术分享

【RL-TCPnet网络教程】第26章 RL-TCPnet之DHCP应用

本章节为大家讲解RL-TCPnet的DHCP应用,学习本章节前,务必要优先学习第25章的DHCP基础知识。有了这些基础知识之后,再搞本章节会有事半功倍的效果。

11210
来自专栏Gaussic

使用 Spring HATEOAS 开发 REST 服务

原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-SpringHATEOAS/

12420
来自专栏JAVA同学会

Zookeeper应用之——栅栏(barrier)

barrier的作用是所有的线程等待,知道某一时刻,锁释放,所有的线程同时执行。举一个生动的例子,比如跑步比赛,所有 运动员都要在起跑线上等待,直到枪声响后,所...

9510
来自专栏JAVA同学会

Zookeeper应用之——栅栏(barrier)

barrier的作用是所有的线程等待,知道某一时刻,锁释放,所有的线程同时执行。举一个生动的例子,比如跑步比赛,所有

11430
来自专栏云霄雨霁

Java虚拟机--(互斥同步与非阻塞同步)和锁优化

22640

扫码关注云+社区

领取腾讯云代金券