gpt4 book ai didi

java - 出站消息的 Netty 管道顺序

转载 作者:行者123 更新时间:2023-12-02 02:51:38 27 4
gpt4 key购买 nike

我正在使用 Netty v4.1.9final 并尝试从客户端向服务器发送消息。我尝试在客户端使用处理程序设置 channel 客户端初始值设定项,如下所示:

final Bootstrap bootstrap = BootstrapGenerator.generate();
bootstrap.handler(new XmlClientInitializer());

XMLClientInitializer

public class XmlClientInitializer extends ChannelInitializer<SocketChannel> {

@Override
public void initChannel(SocketChannel ch) throws Exception {
final ChannelPipeline pipeline = ch.pipeline();

pipeline.addLast("fileEncoder", new FileEncoder());
pipeline.addLast("handler", new XmlSenderHandler());
}
}

文件编码器

public class FileEncoder extends MessageToByteEncoder<String> {

XmlSenderHandler

public class XmlSenderHandler extends ChannelOutboundHandlerAdapter {

private static final Logger log = LogManager.getLogger(XmlSenderHandler.class.getName());
private static ChannelHandlerContext ctx;

@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) {
log.info("attempting to write messages to server {}", msg.toString());
ctx.write(msg, promise);
}

@Override
@SuppressWarnings("FutureReturnValueIgnored")
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
super.exceptionCaught(ctx, cause);
}
}

即使 FileEncoder 是在管道中首先定义的,它也会在 xml 处理程序之后被调用(这不是我想要的)。这是因为 FileEncoder 正在扩展 MessageToByteEncoder 还是我错误地配置了 channel ?

最佳答案

否,管道配置正确。要点是,入站事件是从第一个处理程序到最后一个处理程序处理的,而出站事件是从最后一个处理程序到第一个处理程序处理的。 ChannelPipeline doc

关于java - 出站消息的 Netty 管道顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43746000/

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