Netty 中通道处理程序的顺序
Order of channel Handlers in Netty
我正在尝试学习 netty 频道处理程序,但我在这方面遇到了困难 tutorial。
在文件 NettyServer.java
中,作者提到了将通道处理程序注册到通道管道。
ch.pipeline().addLast(
new RequestDecoder(),
new ResponseDataEncoder(),
new ProcessingHandler());
这个顺序让我有点困惑。自
以来,我会按照以下方式注册订单
- 请求已解码
- 处理解码请求并生成响应
响应被解码是正确的顺序。
ch.pipeline().addLast(
new RequestDecoder(),
new ProcessingHandler(),
new ResponseDataEncoder());
Netty 中不同顺序背后的原因是什么?
这里要了解的重要一点是入站和出站消息(和事件)流向不同的方向。入站数据(即您收到的数据)将从 ChannelPipeline 的头部开始,而您编写的消息将从末尾开始。所以被调用的处理程序的顺序是不同的。
查看 ChannelPipeline javadocs,它也有一些图表以使其更清楚:
http://netty.io/4.1/api/io/netty/channel/ChannelPipeline.html
我正在尝试学习 netty 频道处理程序,但我在这方面遇到了困难 tutorial。
在文件 NettyServer.java
中,作者提到了将通道处理程序注册到通道管道。
ch.pipeline().addLast(
new RequestDecoder(),
new ResponseDataEncoder(),
new ProcessingHandler());
这个顺序让我有点困惑。自
以来,我会按照以下方式注册订单- 请求已解码
- 处理解码请求并生成响应
响应被解码是正确的顺序。
ch.pipeline().addLast( new RequestDecoder(), new ProcessingHandler(), new ResponseDataEncoder());
Netty 中不同顺序背后的原因是什么?
这里要了解的重要一点是入站和出站消息(和事件)流向不同的方向。入站数据(即您收到的数据)将从 ChannelPipeline 的头部开始,而您编写的消息将从末尾开始。所以被调用的处理程序的顺序是不同的。
查看 ChannelPipeline javadocs,它也有一些图表以使其更清楚:
http://netty.io/4.1/api/io/netty/channel/ChannelPipeline.html