当前位置: 首页 > news >正文

Netty学习笔记01--出入站处理器顺序

Netty学习笔记01--出入站处理器顺序

    • 1.注册顺序影响事件的触发
    • 2.入站执行遵循FIFO、出站执行则FILO
    • 3.只会触发最后一个出站处理器的`flush`方法
    • 4.通信端的消息编解码需保持逻辑一致

1.注册顺序影响事件的触发

例如在入站处理器的channelActive() 中调用出站处理器中的write(),如果出站处理器在入站处理器之后注册,则·write()`不会被触发。

// channelActive()中调用ctx.write()
ch.pipeline().addLast(new InHandler01());
ch.pipeline().addLast(new OutHandler01());// write()不会触发
ch.pipeline().addLast(new OutHandler02());// write()不会触发

2.入站执行遵循FIFO、出站执行则FILO

入站的处理器遵循配置顺序,先注册,先执行;
出站的处理器执行顺序则是先注册,后执行。

protected void initChannel(SocketChannel ch) throws Exception {ch.pipeline().addLast(new StringEncoder());ch.pipeline().addLast(new OutHandler01());ch.pipeline().addLast(new OutHandler02());ch.pipeline().addLast(new InHandler01());ch.pipeline().addLast(new InHandler02());
}

仅在InHandler01的channelActive中调用 ctx.write()。与服务端连接后,触发了入站处理器的channelRegisteredchannelActive。可以看到:

  • 入站处理器执行顺序遵循配置,出站处理器则相反
----终端输出:
inHandler01 channelRegistered
inHandler02 channelRegistered
OutHandler02 connect
OutHandler01 connect
inHandler01 channelActive
OutHandler02 write			
OutHandler02 msg: hello			//此处调用flush
OutHandler01 write
OutHandler01 msg: helloworld
OutHandler01 flush			// 执行了OutHandler01
inHandler02 channelActive

3.只会触发最后一个出站处理器的flush方法

仅在OutHandler02的write()方法中调用ctx.flush()。根据上面的终端输出可以看到,仅执行了最后一个出站处理器的flush()

4.通信端的消息编解码需保持逻辑一致

// 客户端发送消息,使用String编码
ch.pipeline().addLast(new StringEncoder());// 服务端使用String解码
ch.pipeline().addLast(new StringDecoder());

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 学习记录702@计算机组成原理之计算机硬件组成细化
  • FFmpeg源码:av_packet_move_ref、av_packet_make_refcounted函数分析
  • C语言典型例题32
  • ElementUI修改主题色
  • 【Pytorch】topk函数
  • Postgresql导入矢量数据
  • LVS详细配置
  • javacpp使用入门
  • Python爬虫(8)
  • MySQL --- 用户管理
  • C语言 | Leetcode C语言题解之第327题区间和的个数
  • vscode插件中的图标怎么设置
  • 理解Go语言中多种并发模式
  • 2024年6月 青少年机器人技术等级考试理论综合试卷(二级)
  • 文件共享服务NFS(服务名nfs,端口tcp/2049)
  • 77. Combinations
  • dva中组件的懒加载
  • IP路由与转发
  • Puppeteer:浏览器控制器
  • Python利用正则抓取网页内容保存到本地
  • React-生命周期杂记
  • Spring Cloud Feign的两种使用姿势
  • 阿里研究院入选中国企业智库系统影响力榜
  • 阿里云前端周刊 - 第 26 期
  • 不上全站https的网站你们就等着被恶心死吧
  • 工程优化暨babel升级小记
  • 简单数学运算程序(不定期更新)
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 使用 @font-face
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 在Mac OS X上安装 Ruby运行环境
  • NLPIR智能语义技术让大数据挖掘更简单
  • ​人工智能书单(数学基础篇)
  • ​如何防止网络攻击?
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $nextTick的使用场景介绍
  • (floyd+补集) poj 3275
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (第二周)效能测试
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (算法二)滑动窗口
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)树状数组
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .gitignore文件—git忽略文件
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .NET NPOI导出Excel详解
  • .Net 垃圾回收机制原理(二)
  • .net 怎么循环得到数组里的值_关于js数组
  • .Net 执行Linux下多行shell命令方法
  • .NET上SQLite的连接
  • .NET中 MVC 工厂模式浅析