【转】netty4.1.32 pipeline的添加顺序和执行顺序
原文:https://www.cnblogs.com/ruber/p/10186571.html
本文只想讨论一下pipeline的执行顺序问题,因为这个搞不明白就不知道先添加编码还是解码,是不是可以混淆添加等等一系列事情
1 pipeline.addLast(new outboundsHandler1()); //out1
2 pipeline.addLast(new outboundsHandler2()); //out2
3
4 pipeline.addLast(new InboundsHandler1()); //in1
5 pipeline.addLast(new InboundsHandler2()); //in2
6 pipeline.addLast("handler", new HelloServerHandler());//in3
先说最基本的, 读入数据,需要解码数据,执行顺序和注册顺序一致 in1 --> in2 -->in3 他们之间通过 ctx.fireChannelRead(msg);进行传递
解码完成,逻辑处理,进行数据发送 通过 ctx.writeAndFlush()就完成从in -->out的转换
out的执行顺是和注册顺序相反的,也就是out2 -->out1这么个顺序 out间的传递通过ctx.writeAndFlush();函数进行传递
ctx.channel().writeAndFlush() 和 ctx.writeAndFlush() 区别
网上说注册 outhandler的时候,必须放到最后一个inhandler前面(本例就是in3前面),其实是不准确的 比如
1 pipeline.addLast(new InboundsHandler1()); //in1
2 pipeline.addLast(new InboundsHandler2()); //in2
3 pipeline.addLast("handler", new HelloServerHandler());//in3
4
5 pipeline.addLast(new outboundsHandler1()); //out1
6 pipeline.addLast(new outboundsHandler2()); //out2
比如我注册时out放后面,接收执行到in3时,执行ctx.writeAndFlush(),会发生什么呢,outhandler不调用,因为ctx.writeAndFlush()是从当前节点往前查找out类handler,而out节点注册在当前节点后边
这种情况要想让他执行outhandler的处理,应该执行ctx.channel().writeAndFlush();这是从链表结尾开始往前查找out类handler,这就是两种writeAndFlush的区别
网上这种说法是使用ctx.writeAndFlush()的一种使用方式而已,还是要根据情况深入理解!
out就是继承自ChannelOutboundHandlerAdapter的 通常可以用来编码
in就是继承自ChannelInboundHandlerAdapter的,通常用来解码
【转】netty4.1.32 pipeline的添加顺序和执行顺序的更多相关文章
- netty4.1.32 pipeline的添加顺序和执行顺序
本文只想讨论一下pipeline的执行顺序问题,因为这个搞不明白就不知道先添加编码还是解码,是不是可以混淆添加等等一系列事情 pipeline.addLast(new outboundsHandler ...
- mysql语句的书写顺序和执行顺序
mysql语句的书写顺序和执行顺序有很大差异. 书写顺序,mysql的一般书写顺写为: select <要返回的数据列> from <表名> <join, left jo ...
- SQL 中的语法顺序与执行顺序(转)
很多程序员都很抵触SQL.其实SQL是一整为数不多的声明性语言,只是它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语言.甚至是函数语言. 今天大家共同学习下SQL的语法顺序与执行顺序.( ...
- Oracle-SQL语句的语法顺序和执行顺序
SQL语句的语法顺序和执行顺序了,我们常见的SQL语法顺序如下: SELECT DISTINCT <Top Num> <select list>FROM [left_table ...
- pipeline的添加顺序和执行顺序
原文链接:https://www.cnblogs.com/ruber/p/10186571.html 本文只想讨论一下pipeline的执行顺序问题,因为这个搞不明白就不知道先添加编码还是解码,是不是 ...
- MySQL语法顺序及执行顺序
一.书写顺序 select[distinct] from join on where group by having union order by limit 二.执行顺序 from on join ...
- SQL 中的语法顺序与执行顺序
FROM : HOME SQL 是一种声明式语言 SQL 语言是为计算机声明了一个你想从原始数据中获得什么样的结果的一个范例,而不是告诉计算机如何能够得到结果. SQL 语言声明的是结果集的属性,计算 ...
- sql语句解析顺序和执行顺序
sql语句执行顺序1.from子句组装来自不同数据源的数据2.where子句基于指定的条件对记录行进行筛选3.group by子句将数据划分为多个分组4.使用聚集函数进行计算5.使用having子句筛 ...
- mysql 中sql语句关键字的书写顺序与执行顺序
书写顺序: select -> from -> where -> group by -> having -> order by 执行顺序: from -> wher ...
随机推荐
- Forms Process (FRMWEB) Consumes 100% of CPU in Oracle Applications R12 (文档 ID 745711.1)
https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=283767243216583&id=745711.1& ...
- log4j日志properties配置
#Console Log log4j.rootLogger=INFO,console,debug,info,warn,error LOG_PATTERN=[%d{yyyy-MM-dd HH:mm:ss ...
- 线程的 run()和 start()有什么区别?(未完成)
线程的 run()和 start()有什么区别?(未完成)
- [GDOI2014]采集资源
题目概述 题目描述 魔兽争霸3中,战略资源的采集通过使用农民.苦工.小精灵以及寺僧来进行. 在魔兽争霸4的开发中,玻璃渣觉得这种模式太过单一,于是他们想添加更多的单位来使采集的模式更加丰富. 在新的模 ...
- Java数组直接选择排序、sort()排序
/** * 1.数组sort()排序 * 2.直接选择排序(两重for循环排序) */ import java.lang.*; import java.lang.reflect.Array; impo ...
- ZZNUOJ-2157: 水滴来袭-【干扰阅读-卡模糊精度1e-8的问题】
ZZNUOJ-2157: 水滴来袭 那是一个冷雨霏霏的秋天的下午,当罗辑拿着枪威胁三体文明的时候,如果过了三十秒三体人还没有同他展开谈判,罗辑就会扣动扳机即刻结束自己的生命,随后他身上的核弹控制器就会 ...
- python中常见的日期处理方法
今天:today = datetime.date.today() 昨天:yesterday = today - datetime.timedelta(days=1) 上个月:last_month = ...
- ActiveMQ之JMS及保证消息的可靠性<持久化、事务、签收>(三)
1.JAVAEE 是一套使用Java 进行企业级开发的13 个核心规范工业标准 , 包括: JDBC 数据库连接 JNDI Java的命名和目录接口 EJB Enterprise java b ...
- Python+request 获取响应(elapsed)和响应时间(timeout)《七》
requests发请求时,接口的响应时间,也是我们需要关注的一个点,如果响应时间太长,也是不合理的.如果服务端没及时响应,也不能一直等着,可以设置一个timeout超时的时间 具体的实现如下: 超时( ...
- JS BOM基础 全局对象 window location history screen navigator
全局变量声明的两种方式:1,window.变量名=值;2,var 变量名=值; 全局函数声明的两种方式:1,window.函数名=function(){}2,function 函数名=function ...