ChannelHandlerContext组件
ChannelHandlerContext常叫ctx。
ChannelHandlerContext里就包含着ChannelHandler中的上下文信息,每一个ChannelHandler被添加都ChannelPipeline中都会创建一个与其对应的ChannelHandlerContext。ChannelHandlerContext的功能就是用来管理它所关联的ChannelHandler和在同一个ChannelPipeline中ChannelHandler的交互。
如下图就是ChannelPipeline和Channel和ChannelHandler和ChannelHandlerContext之间的关系
ChannelHandlerContext可以做到尽量减少它不感兴趣的ChannelHandler所带来的的开销,比如某个逻辑只需要某几个处理器,因此可以不用从头开始处理,直接从需要的第一个的ChannelHandler的地方进行处理。
因为一个ChannelHandler可以同时属于多个ChannelPipeline,因此它也是可以有多个ChannelHandlerContext,这种用法的ChannelHandler就可以使用@Sharable注解,因此在使用Sharable注解的时候要确定自己的ChannelHandler是线程安全的。
ctx默认类型为DefaultChannelHandlerContext,数据结构为双向链表,可以获取到的信息有很多,同时有很多方法,是Netty处理中最为常见的对象。
ctx.channel() // 获取其对应的管道
ctx.pipeline() // 获取启对应的pipeline
在进行Netty编程时,可以使用Map存储对应的ctx变量,进而获取到对应的通道直接发送数据