gpt4 book ai didi

未调用 netty channelDuplexHandler 写入

转载 作者:行者123 更新时间:2023-12-01 11:16:17 28 4
gpt4 key购买 nike

ChannelDuplexHandler write 方法应该在它是最后一个处理程序时调用,但实际上并非如此。

来自 ChannelPipeline ,

 ChannelPipeline p = ...;
p.addLast("1", new InboundHandlerA());
p.addLast("5", new InboundOutboundHandlerX());

入站和出站事件的评估顺序可以分别为 1,5 和 5。

所以我认为当调用channelRead中的ctx.write()时应该调用下面类中的write:

@ChannelHandler.Sharable
@Component
public class InboundOutboundHandlerX extends ChannelDuplexHandler {


@Override
public void channelReadComplete(ChannelHandlerContext ctx) {
ctx.flush();
}

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
ctx.write(msg); // I have also tried writeAndFlush(msg)
}

@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
ctx.write(msg, promise);
}

}

是否有特殊技巧来调用最后一个双工处理程序写入方法?

最佳答案

感谢诺曼的 slides ,这是因为 ctx.write()writeAndFlush() 将从下一个处理程序开始,而不是当前处理程序,而 ctx.channel().write( ) 将从 pipeline 的顶部(或尾部,如果更符合方向感)开始。

关于未调用 netty channelDuplexHandler 写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50694587/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com