侧边栏壁纸
博主头像
Elltor

用心发现生活,积极面对工作、事,坚持每天让自己进步一点。

  • 累计撰写 169 篇文章
  • 累计创建 1 个标签
  • 累计收到 12 条评论
标签搜索

目 录CONTENT

文章目录

Easy Netty 系列(五):ChannelHandlerContext详解

Elltor
2021-12-02 / 0 评论 / 0 点赞 / 520 阅读 / 779 字 / 正在检测是否收录...

ChannelHandlerContext的主要功能是关联 ChannelPipeline与ChannelHandler然后管理ChannelHandler,另一方面是管理和同一个Pipeline中的其他Handler的交互,也就是Handler之间的事件传递。

ChannelHandlerContext的能力

image

通过上图里的方法可以看出ChannelHandlerContext的能力:

  • 获取ByteBuf分配器
  • 获取绑定的Channel
  • 获取绑定的Pipeline
  • 进行事件通知,以 fire* 开头的方法
  • 连接管理(bindconnectdisconnect)
  • 数据读写(writewiriteAndFlushread)

ChannelHandlerContext与Channel、ChannelPipeline的关系

image

说明:

  1. 每一个ChannelHandlerContext与一个ChannelHandler绑定,一旦关联不会改变,因此缓存ChannelHandlerConntext是安全的
  2. 每一个ChannelHandlerContext也与一个ChannelPipeline关联,关联后不会改变
  3. 使用ChannelHandlerContext的方法触发的事件从下一个节点流转,而使用Pipeline、Channel产生的事件从pipeline头部流转。

特殊情况:由于ChannelHandler可以是共享的,也就是说可以和多个Pipeline关联,此时ChannelHandler对于每一个关联的Pipeline都创建一个ChannelHandlerContext。

ChannelHandlerContext应用

  1. 缓存起来,在其他方法或线程中使用(因为ChannelHandlerContext的绑定是不变的可以放心使用)
  2. 控制pipeline,实现协议的切换

EOF : -)

0

评论区