Netty PipeLine 注意事项总结
  NiPpzTR2CXqv 2023年11月15日 27 0


执行顺序的总结如下

1、InboundHandler是通过fire事件决定是否要执行下一个InboundHandler,如果哪个InboundHandler没有调用fire事件,那么往后的Pipeline就断掉了。

2、InboundHandler是按照Pipleline的加载顺序,顺序执行。

3、OutboundHandler是按照Pipeline的加载顺序,逆序执行。

4、有效的InboundHandler是指通过fire事件能触达到的最后一个InboundHander。

5、如果想让所有的OutboundHandler都能被执行到,那么必须把OutboundHandler放在最后一个有效的InboundHandler之前。

6、推荐的做法是通过addFirst加载所有OutboundHandler,再通过addLast加载所有InboundHandler。

7、OutboundHandler是通过write方法实现Pipeline的串联的。

8、如果OutboundHandler在Pipeline的处理链上,其中一个OutboundHandler没有调用write方法,最终消息将不会发送出去。

9、ctx.writeAndFlush是从当前ChannelHandler开始,逆序向前执行OutboundHandler。

10、ctx.writeAndFlush所在ChannelHandler后面的OutboundHandler将不会被执行。

11、ctx.channel().writeAndFlush 是从最后一个OutboundHandler开始,依次逆序向前执行其他OutboundHandler,即使最后一个ChannelHandler是OutboundHandler,在InboundHandler之前,也会执行该OutbondHandler。

12、千万不要在OutboundHandler的write方法里执行ctx.channel().writeAndFlush,否则就死循环了。

13、Netty 内置了很多 ChannelInboundHandlerAdapter 的实现类可以直接使用,例如 SimpleChannelInboundHandler、Base64Encoder、StringEncoder 等,在使用这些的时候,要注意不管你是在使用 ctx.fireChannelRead ,还是在使用 ctx.write ,都要留意传递的数据所对应的类型必须要和这些内置实现类的泛型类型保持一致,否则内容不能被正常传递,因为这些内置的实现类中基本上都做了对应类型的校验,不是自己泛型设定的内容是不处理的。

netty4.1.32 pipeline的添加顺序和执行顺序

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的,通常用来解码


(END)


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   55   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   110   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
NiPpzTR2CXqv