Java 奈蒂·查恩拉斯特

Java 奈蒂·查恩拉斯特,java,handler,netty,pipeline,Java,Handler,Netty,Pipeline,我正在学习netty,下面是一个示例代码 ChannelPipeline pipeline = pipeline(); // Enable stream compression (you can remove these two if unnecessary) pipeline.addLast("deflater", new ZlibEncoder(ZlibWrapper.GZIP)); pipeline.addLast("inflater", new ZlibDecoder(ZlibWrapp

我正在学习netty,下面是一个示例代码

ChannelPipeline pipeline = pipeline();
// Enable stream compression (you can remove these two if unnecessary)
pipeline.addLast("deflater", new ZlibEncoder(ZlibWrapper.GZIP));
pipeline.addLast("inflater", new ZlibDecoder(ZlibWrapper.GZIP));

// Add the number codec first,
pipeline.addLast("decoder", new BigIntegerDecoder());
pipeline.addLast("encoder", new NumberEncoder());

// and then business logic.
// Please note we create a handler for every new channel
// because it has stateful properties.
pipeline.addLast("handler", new FactorialServerHandler());
我的问题是,在哪里可以看到addLast方法的有效第一个参数列表,如deflater、充气器、解码器、编码器、处理程序等


我在源代码中找不到实现映射的地方。在这里,我的意思是消息到达和ChannelPipeline检查deflater是否已设置,并调用ZlibEncoder.GZIP方法。

名称可以是任何内容,它们不是关键字,也就是说,将其称为“编码器”与将其称为“awesome_编码器”无异

处理程序按照调用addLast的顺序添加到链中。它们是否添加到入站或出站链取决于它们是实现ChannelInboundHandler还是ChannelOutboundHandler

这里有一些很好的信息:

您添加的订单

ChannelPipeline p = pipeline();
p.addLast("1", new InboundHandlerA());
p.addLast("2", new InboundHandlerB());
p.addLast("3", new OutboundHandlerA());
p.addLast("4", new OutboundHandlerB());
p.addLast("5", new InboundOutboundHandlerX());
在给定的示例配置中,当事件进入时,处理程序的求值顺序为1、2、3、4、5。当事件传出时,顺序为5、4、3、2、1。在此原则之上,ChannelPipeline跳过某些处理程序的评估以缩短堆栈深度

您可以查看此网站以了解更多详细信息


这些名称仅用于方便使用
remove
replace
方法。它用于
DefaultChannelPipeline
的内部映射是@veer,我仍然不清楚框架如何知道,当收到数据包时,它应该调用deflater和decoder,当以正确的顺序发送数据包膨胀器和编码器时。上游和下游消息只是按照顺序沿管道传播。许多年后,感谢这一非常清楚的解释。这个主题特别令人困惑,因为“入站”是“自下而上”的,而正如您在这里所展示的,如果您从代码流的角度来看,它是“自上而下”的,至少有人通常使用
addLast()
编写它。