2

我正在学习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、解码器、编码器、处理程序等。

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

4

2 回答 2

3

您添加的订单

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

于 2017-03-01T08:47:45.693 回答
2

名称可以是任何东西,它们不是关键字,即称它为“encoder”与称它为“awesome_encoder”没有什么不同。

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

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

于 2014-03-22T05:21:39.080 回答