我正在学习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方法。
答案 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