gpt4 book ai didi

java - Netty TCP 客户端异步消息

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

我正在构建一个 TCP 客户端来接收和发送消息。我按照 Netty user guide 上的步骤操作并编写了一个简单的 TCP 客户端,其中包含扩展 ChannelInboundHandlerAdapter 的自定义处理程序。

在处理程序中,我存储 ChannelHandlerContext:

 @Override
public void channelActive (ChannelHandlerContext ctx) throws Exception {
super.channelActive (ctx);
this.ctx = ctx;
}

然后我有一个使用 ChannelHandlerContext 发送消息的发送方法:

 public void sendMessage (String msg) {
if (ctx == null) {
return;
}
ChannelFuture cf = ctx.write (Unpooled.copiedBuffer (msg, CharsetUtil.UTF_8));
ctx.flush ();
}

我发现的另一个选项是在客户端类中使用 Channel 对象

 channel.writeAndFlush (msg);

我需要从不同的线程调用发送方法。最好的方法是什么?

提前致谢。

最佳答案

ChannelHandlerContextChannel 都是线程安全的,因此您可以从任何线程进行写入,无需担心。

如果您使用Channel.write(),消息将必须通过完整的管道。但是,如果您使用 ChannelHandlerContext.write(),它将只需要遍历管道中的上游处理程序。因此写入 ChannelHandlerContext 更加高效。

还要注意,大多数时候最好使用 writeAndFlush() 而不是 write()

看看this presentation了解更多详情。

关于java - Netty TCP 客户端异步消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43272817/

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