ch.write()遍历整个管道

时间:2012-02-01 02:16:03

标签: netty

我的应用程序中有两个SimpleChannelHandler

pipeline.addLast("handler1", new FirstHandler());
pipeline.addLast("handler1", new SecondHandler());

两者都实现了messageReceivedwriteRequestedFirstHandler正在做一些握手的事情,并且在完成之后将被删除,这样只有SecondHandler留在管道中。

如果我在握手步骤中用ch.write(...)在通道上写东西,那么它将通过整个管道(从最后一个到第一个处理程序)。为什么即使来自writeRequested的{​​{1}}被调用?我预计它会从我们执行ch.write(...)的层返回:

SecondHandler

为什么 | ^ v | FirstHandler ----> FirstHandler // Not used in the handshaking step SecondHandler ----> SecondHandler 会遍历所有图层?

1 个答案:

答案 0 :(得分:1)

这是因为,有许多方法可以从处理程序写入,从channel.write()直接使用org.jboss.netty.channel.Channels类。您已经使用了channel.write(),它实际上是委托给第一个。在您的情况下,您必须直接使用频道中的第二种方法。

  1. 写入管道中的最后一个下游处理程序

    public static ChannelFuture write(Channel channel, Object message)..

  2. 写入最近的下游处理程序

    public static void write(ChannelHandlerContext ctx, ChannelFuture future, Object message)..