Netty 中通道处理程序的顺序

Order of channel Handlers in Netty

我正在尝试学习 netty 频道处理程序,但我在这方面遇到了困难 tutorial

在文件 NettyServer.java 中,作者提到了将通道处理程序注册到通道管道。

    ch.pipeline().addLast(
    new RequestDecoder(), 
    new ResponseDataEncoder(), 
    new ProcessingHandler());

这个顺序让我有点困惑。自

以来,我会按照以下方式注册订单
  1. 请求已解码
  2. 处理解码请求并生成响应
  3. 响应被解码是正确的顺序。

    ch.pipeline().addLast(
    new RequestDecoder(),
    new ProcessingHandler(),
    new ResponseDataEncoder());
    

Netty 中不同顺序背后的原因是什么?

这里要了解的重要一点是入站和出站消息(和事件)流向不同的方向。入站数据(即您收到的数据)将从 ChannelPipeline 的头部开始,而您编写的消息将从末尾开始。所以被调用的处理程序的顺序是不同的。

查看 ChannelPipeline javadocs,它也有一些图表以使其更清楚:

http://netty.io/4.1/api/io/netty/channel/ChannelPipeline.html