我的应用程序中有两个SimpleChannelHandler:
pipeline.addLast("handler1", new FirstHandler());
pipeline.addLast("handler1", new SecondHandler());两者都实现了messageReceived和writeRequested。FirstHandler正在进行一些握手操作,并且在握手完成后将被移除,这样就只有SecondHandler留在管道中。
如果我在握手步骤中使用ch.write(...)在通道上写了一些东西,那么它将遍历整个管道(从最后一个处理程序到第一个处理程序)。为什么要调用来自SecondHandler的writeRequested呢?我预计它只是从我们做ch.write(...)的那一层返回:
| ^
v |
FirstHandler ----> FirstHandler
// Not used in the handshaking step
SecondHandler ----> SecondHandler为什么ch.write(...)要遍历所有层?
发布于 2012-02-01 17:36:43
这是因为,有许多方法可以从处理程序编写代码,从channel.write()到直接使用org.jboss.netty.channel.Channels类。您已经使用了channel.write(),它实际上委托给first。在您的例子中,您必须直接使用通道中的第二个方法。
到最近的下游处理程序的public static ChannelFuture write(Channel channel, Object message)..
public static void write(ChannelHandlerContext ctx, ChannelFuture future, Object message)..
https://stackoverflow.com/questions/9089849
复制相似问题