本文只想讨论一下pipeline的执行顺序问题,因为这个搞不明白就不知道先添加编码还是解码,是不是可以混淆添加等等一系列事情

         pipeline.addLast(new outboundsHandler1()); //out1
pipeline.addLast(new outboundsHandler2()); //out2 pipeline.addLast(new InboundsHandler1()); //in1
pipeline.addLast(new InboundsHandler2()); //in2
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前面),其实是不准确的 比如

         pipeline.addLast(new InboundsHandler1()); //in1
pipeline.addLast(new InboundsHandler2()); //in2
pipeline.addLast("handler", new HelloServerHandler());//in3 pipeline.addLast(new outboundsHandler1()); //out1
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的添加顺序和执行顺序的更多相关文章

  1. 【转】netty4.1.32 pipeline的添加顺序和执行顺序

    原文:https://www.cnblogs.com/ruber/p/10186571.html 本文只想讨论一下pipeline的执行顺序问题,因为这个搞不明白就不知道先添加编码还是解码,是不是可以 ...

  2. mysql语句的书写顺序和执行顺序

    mysql语句的书写顺序和执行顺序有很大差异. 书写顺序,mysql的一般书写顺写为: select <要返回的数据列> from <表名> <join, left jo ...

  3. SQL 中的语法顺序与执行顺序(转)

    很多程序员都很抵触SQL.其实SQL是一整为数不多的声明性语言,只是它的运行方式完全不同于我们所熟知的命令行语言.面向对象的程序语言.甚至是函数语言. 今天大家共同学习下SQL的语法顺序与执行顺序.( ...

  4. Oracle-SQL语句的语法顺序和执行顺序

    SQL语句的语法顺序和执行顺序了,我们常见的SQL语法顺序如下: SELECT DISTINCT <Top Num> <select list>FROM [left_table ...

  5. pipeline的添加顺序和执行顺序

    原文链接:https://www.cnblogs.com/ruber/p/10186571.html 本文只想讨论一下pipeline的执行顺序问题,因为这个搞不明白就不知道先添加编码还是解码,是不是 ...

  6. MySQL语法顺序及执行顺序

    一.书写顺序 select[distinct] from join on where group by having union order by limit 二.执行顺序 from on join ...

  7. SQL 中的语法顺序与执行顺序

    FROM : HOME SQL 是一种声明式语言 SQL 语言是为计算机声明了一个你想从原始数据中获得什么样的结果的一个范例,而不是告诉计算机如何能够得到结果. SQL 语言声明的是结果集的属性,计算 ...

  8. sql语句解析顺序和执行顺序

    sql语句执行顺序1.from子句组装来自不同数据源的数据2.where子句基于指定的条件对记录行进行筛选3.group by子句将数据划分为多个分组4.使用聚集函数进行计算5.使用having子句筛 ...

  9. mysql 中sql语句关键字的书写顺序与执行顺序

    书写顺序: select -> from -> where -> group by -> having -> order by 执行顺序: from -> wher ...

随机推荐

  1. Mac OS X 11年9个版本的历经变化

    本月苹果将发布OS X 10.8 Mountain Lion,是Mac OS X系统在其11年生命长河中的第9个版本.2001年,刚从鬼门关爬回来的苹果决定在OS X上做一个赌注,因为他们已经浪费了1 ...

  2. Java9 modules (Jigsaw)模块化迁移

    要点 通过模块化的方式开发应用程序,实现更好的设计,如关注点分离和封装性. 通过Java平台模块化系统(JPMS),开发者可以定义他们的应用程序模块,决定其他模块如何调用他们的模块,以及他们的模块如何 ...

  3. iOS: 在Xcode7系列中给类名自动添加前缀

    添加前缀原因: 我个人还是很喜欢 Class Prefix 的,因为: 1. 使用它几乎不增加什么成本, 2. 不使用它可能会造成安全隐患, 3. 它能够以直接的方式编码一些信息以供未来的回溯, 4. ...

  4. Unity3D新手教学,让你十二小时,从入门到掌握!(一) [转]

    http://blog.csdn.net/aries_h/article/details/47307799 版权声明:本文为Aries原创文章,转载请标明出处.如有不足之处欢迎提出意见或建议,联系QQ ...

  5. Hadoop平台配置汇总

    Hadoop平台配置汇总 @(Hadoop) Hadoop hadoop-env.sh和yarn-env.sh中export log和pid的dir即可和JAVA_HOME. core-site.xm ...

  6. linux 的计划任务 cron

    https://serverfault.com/questions/587696/how-to-restart-php-fpm-from-cron 我也遇到了这个问题,想用cron 来启动php-fp ...

  7. MySQL数据库如何与EXCEL的XLS格式相互转换

    1 将SQL导出为EXCEL方法,有如下数据库(my_impa),里面有两张表 2 如果是EXCEL格式,一定要勾选"将字段名称放在首行",否则待会儿导入的时候就需要你手工新建字段 ...

  8. attributes vs properties --记于jquery attr不能正确更新input的value值后

    最近做的前端页面是个单页面应用,需要经常给个input赋值什么的. 我常用的方式是$('#id').attr('value','XXXX'),一直可以正常使用.今天突然发现一个问题,某个要赋值的inp ...

  9. Android4.4 SystemUI加入Dialog弹窗

    此弹窗为开机SystemUI的显示弹窗: 首先.在SystemUI的源代码文件夹加入源代码类文件,文件夹为frameworks/base/packages/SystemUI/src/com/andro ...

  10. 设计模式在cocos2d-x中的使用--简单工厂模式(Simple Factory)

    什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式.通过专门定义一个类来负责创建其它类的实例,被创建的实例 ...