netty ChannelPipeline addLast

时间:2012-08-10 06:57:45

标签: 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(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,inflater,decoder,encoder,handler等。

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

2 个答案:

答案 0 :(得分:2)

名称可以是任何名称,它们不是关键字,即称之为"编码器"与调用它没什么不同," awesome_encoder"。

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

这里有一些很好的信息: https://docs.jboss.org/netty/3.2/api/org/jboss/netty/channel/ChannelPipeline.html

答案 1 :(得分:0)

您添加的订单

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会跳过某些处理程序的评估以缩短堆栈深度

您可以查看此网站了解更多详情

https://netty.io/4.0/api/io/netty/channel/ChannelPipeline.html