我的应用程序中有两个SimpleChannelHandler
:
pipeline.addLast("handler1", new FirstHandler());
pipeline.addLast("handler1", new SecondHandler());
两者都实现了messageReceived
和writeRequested
。 FirstHandler
正在做一些握手的事情,并且在完成之后将被删除,这样只有SecondHandler
留在管道中。
如果我在握手步骤中用ch.write(...)
在通道上写东西,那么它将通过整个管道(从最后一个到第一个处理程序)。为什么即使来自writeRequested
的{{1}}被调用?我预计它会从我们执行ch.write(...)的层返回:
SecondHandler
为什么 | ^
v |
FirstHandler ----> FirstHandler
// Not used in the handshaking step
SecondHandler ----> SecondHandler
会遍历所有图层?
答案 0 :(得分:1)
这是因为,有许多方法可以从处理程序写入,从channel.write()直接使用org.jboss.netty.channel.Channels
类。您已经使用了channel.write(),它实际上是委托给第一个。在您的情况下,您必须直接使用频道中的第二种方法。
写入管道中的最后一个下游处理程序
public static ChannelFuture write(Channel channel, Object message)..
写入最近的下游处理程序
public static void write(ChannelHandlerContext ctx, ChannelFuture future, Object message)..