文章目录

  • 一、 ChannelHandlerContext 组件
  • 二、 ChannelHandlerContext 组件 debug 调试
  • 三、 ChannelHandlerContext 组件 debug 调试结果分析

一、 ChannelHandlerContext 组件


1 . ChannelHandlerContext 通道处理者上下文对象 :

① 保存信息 : ChannelHandlerContext 类中保存与 Channel 通道 , ChannelHandler 通道处理者 , 相关的信息 ;

② 关联处理者 : ChannelHandlerContext 内部维护了一个 ChannelHandler 对象 ;

2 . 相关组件对应关系 :

① 整体脉络 : ChnnelPipeline 本质是双向链表 , 每个元素都是一个 ChannelHandlerContext 对象 , 每个 ChannelHandlerContext 都对应关联了一个 ChannelHandler 对象 ;

② ChnnelPipeline 与 ChannelHandlerContext 对应关系 : 111 个 ChannelPipeline 对应多个 ChannelHandlerContext ;

③ ChannelHandlerContext 与 ChannelHandler 对应关系 : 1:11:11:1 ;

3 . ChannelHandlerContext 常用方法 :

① 获取通道 : 在 ChannelHandlerContext 接口中定义的方法 ;

Channel channel();

② 获取管道 : 在 ChannelHandlerContext 接口中定义的方法 ;

ChannelPipeline pipeline();

③ 获取处理器 : 在 ChannelHandlerContext 接口中定义的方法 ;

ChannelHandler handler();

④ 刷新数据 : 在 ChannelHandlerContext 接口中定义的方法 ;

ChannelHandlerContext flush();

⑤ 关闭通道 : 在 ChannelOutboundInvoker 接口中定义的方法 ;

ChannelFuture close();

⑥ 写出数据 : 在 ChannelOutboundInvoker 接口中定义的方法 , 作用是将数据写出到 ChannelPipeline 管道中 ;

ChannelFuture writeAndFlush(Object msg);

二、 ChannelHandlerContext 组件 debug 调试


1 . 代码及断点 : 运行 【Netty】使用 Netty 开发 HTTP 服务器 | 三、 HTTP 服务器代码实现 中的 HTTP 服务器代码 , 在用户自定义的 HTTPServerHandler 类的 channelRead0 方法中打断点 , 查看该方法的 ChannelHandlerContext ctx 参数信息 ;

这里只列举部分代码 , 在获取 channelRead0 方法的代码处打上断点 , 查看 ChannelHandlerContext 类型参数信息 ;

public class HTTPServerHandler extends SimpleChannelInboundHandler<HttpObject> {@Overrideprotected void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception {if(msg instanceof HttpRequest){ //判断该  HttpObject msg 参数是否是 Http 请求// 在此处打断点, 查看 ChannelHandlerContext ctx 参数的信息System.out.println(ctx.channel().remoteAddress() + " 客户端请求数据 ... ");// ...}}//...
}

2 . 运行程序进入断点 :

① debug 运行服务器程序 :

② 浏览器访问 : 访问 http://127.0.0.1:8888 地址 , 目前卡在断点 , 无法成功获取 HTTP 资源 ;

③ 服务器端进入断点 : 可以查看 ChannelHandlerContext ctx 参数的具体信息 ;

三、 ChannelHandlerContext 组件 debug 调试结果分析


1 . ChannelHandlerContext 接口的具体实现类型 : 在 重写的 SimpleChannelInboundHandler 的 protected void channelRead0(ChannelHandlerContext ctx, HttpObject msg) throws Exception 方法中 , ctx 参数的实际类型是 DefaultChannelHandlerContext ;

2 . ChannelHandlerContext 双向链表相关分析 :

① 双向链表元素位置 : 该 ChannelHandlerContext ctx 是 ChannelPipeline 的 ChannelHandlerContext 类型双向链表的一部分 , 由上一篇博客 【Netty】Netty 核心组件 ( ChannelPipeline 中的 ChannelHandlerContext 双向链表分析 ) | 三、 Pipeline / ChannelPipeline 管道内双向链表分析 , 分析可知 , 该 ctx 是整个双向链表的第 333 个元素 ;

② 双向链表前一个元素 : HttpServerCodec 服务器编解码器 , 用于 HTTP 协议数据的编码 , 解码处理 ;

③ 双向链表后一个元素 : 后面就是双向链表尾部元素 , 是 DefaultChannelPipeline ;

④ 双向链表 : DefaultChannelPipeline <-> ChannelInitializer <-> HttpServerCodec <-> SimpleChannelInboundHandler ( 自定义派生类 ) <-> DefaultChannelPipeline

贴一张没有标注的图 : 仅做参考 ;

【Netty】Netty 核心组件 ( ChannelHandlerContext )相关推荐

  1. Netty 的核心组件

    Netty 的核心组件有哪些? 1. Bootstrap 与 ServerBootstrap Bootstrap 与 ServerBootstrap 是 Netty 程序的引导类,主要用于配置各种参数 ...

  2. Netty的核心组件

    Netty是什么? Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序.也就是说,Nett ...

  3. Netty学习1——Netty的核心组件

    Netty的核心组件 Netty的主要构件块:Channel.回调.Future.事件和ChannelHandler 1.Channel Channel是Java NIO的一个基本构造. 它代表一个到 ...

  4. netty系列之:channelHandlerContext详解

    文章目录 简介 ChannelHandlerContext和它的应用 AbstractChannelHandlerContext DefaultChannelHandlerContext 总结 简介 ...

  5. Netty方法误解ChannelHandlerContext.writeAndFlush(Object msg)

    乍一看这个方法,以为什么消息都能输出,因为参数是Object类型的,但实际上,netty内部只支持两种类型,如图 所以,不要想当然的扔个Object进去 转载于:https://www.cnblogs ...

  6. Netty -Netty心跳检测机制案例,Netty通过WebSocket编程实现服务器和客户端长链接

    Netty心跳检测机制案例 案例要求 编写一个Netty心跳检测机制案例,当服务器超过3秒没有读时,就提示读空闲 当服务器超过5秒没有写操作时,提示写空闲 服务器超过7秒没有读或者写操作时,就提示读写 ...

  7. Netty : netty 4如何解决空轮询bug

    1.美图 2.概述 空轮询bug参考:Netty : 臭名昭出的JDK的NIO bug(空轮询bug) 4.netty4 解决 4.1 构建阈值 int selectorAutoRebuildThre ...

  8. Netty : netty 3如何解决空轮询bug

    1.美图 2.概述 空轮询bug参考:Netty : 臭名昭出的JDK的NIO bug(空轮询bug) 3. netty 3 如何解决 netty3采用的是第三种方案,检测重点是select函数是否返 ...

  9. Netty —— Netty 模型

    前文 NIO介绍 NIO -- 三大组件 Netty -- 概述 Netty -- 下载.安装 Reactor 模式(单 Reactor 单线程.单 Reactor 多线程.主从 Reactor 多线 ...

最新文章

  1. 【怎样写代码】参数化类型 -- 泛型(五):泛型类
  2. mysql基础小测试三_数据库---MySQL(三)
  3. 免费OA系统品牌有那些?
  4. centos 安装部署 zabbix3
  5. 详解各种锁:CAS、共享锁、排它锁、互斥锁、悲观锁、乐观锁、行级锁、表级锁、页级锁、死锁、JAVA对CAS的支持、ABA问题、AQS原理
  6. 深入浅出parallelStream
  7. Flume sink=avro rpc connection error
  8. centos7离线安装oracle11g,CentOS 7.5离线安装Oracle 11gR2
  9. 子集和问题 算法_子集问题 主要是去重算法
  10. Linux平台上最常用的翻译工具—StarDict(星际译王)。
  11. 家里没有wifi6设备,换wifi6路由器会有提升吗?
  12. 贺利坚老师汇编课程33笔记:[bx+idata]对同长度字符串进行同步处理
  13. 兄弟7895dw粉盒清零_兄弟打印机2260D粉盒怎么清零?
  14. python连接oracle报错:DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: “
  15. win10MATLAB如何完全卸载,怎么完全卸载cad_win10彻底卸载cad的图文步骤-系统城
  16. 愚人节,你的微信公众号图文排版够愚吗?
  17. 大数据开发比赛echarts所有要学习的主要图表 简单化 得分点
  18. 【Android取证篇】三星手机开启开发者模式
  19. 笔记本装双系统!win10+Linux!所有的坑自己一个个爬过来,纪念一下。
  20. 设置了相对定位relative之后,改变top值,如何去掉多余空白?

热门文章

  1. Mysql优化之基础回顾篇
  2. JConsole远程连接配置
  3. ios 中的小技巧 - 总有你想要的 一
  4. Java Daemon线程
  5. python的一些基本概念知识和面试题
  6. C#实现发送手机短信
  7. 微信小程序购物商城系统开发系列-工具篇
  8. OAuth2.0 工作流程
  9. DWZ 验证 CLASS 规则
  10. C# 正则表达式过滤危险HTML