Netty ch.write()贯穿整个管道

Netty ch.write()贯穿整个管道,netty,Netty,我的应用程序中有两个SimpleChannelHandler: pipeline.addLast("handler1", new FirstHandler()); pipeline.addLast("handler1", new SecondHandler()); 两者都实现了消息接收和写入请求。FirstHandler正在执行一些握手操作,完成后将被删除,这样只有SecondHandler留在管道中 如果我在handshainking步骤中使用ch.write(…)在通道上写入一些内容,那么

我的应用程序中有两个
SimpleChannelHandler

pipeline.addLast("handler1", new FirstHandler());
pipeline.addLast("handler1", new SecondHandler());
两者都实现了
消息接收
写入请求
FirstHandler
正在执行一些握手操作,完成后将被删除,这样只有
SecondHandler
留在管道中

如果我在handshainking步骤中使用
ch.write(…)
在通道上写入一些内容,那么它将通过整个管道(从最后一个处理程序到第一个处理程序)。为什么从
SecondHandler
调用
writeRequested
?我以为它只是从我们做ch.write(…)的层返回:


为什么
ch.write(…)
贯穿所有层?

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

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

    公共静态通道未来写入(通道、对象消息)

  • 写入最近的下游处理程序

    公共静态无效写入(ChannelHandlerContext ctx、ChannelFuture、对象消息)


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

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

    公共静态通道未来写入(通道、对象消息)

  • 写入最近的下游处理程序

    公共静态无效写入(ChannelHandlerContext ctx、ChannelFuture、对象消息)


  • 看起来不错。除了我不知道如何处理
    频道未来
    。我正在使用一个
    Channels.future(ctx.getChannel())
    就像在一些示例中一样。如果您选择,请不要对频道future执行任何操作。它看起来不错。除了我不知道如何处理
    频道未来
    。我使用的是一个
    Channels.future(ctx.getChannel())
    ,就像在一些示例中一样。如果您选择,请不要对频道future执行任何操作。
             |                   ^
             v                   |
        FirstHandler ---->  FirstHandler
    
        // Not used in the handshaking step
        SecondHandler ---->  SecondHandler