gpt4 book ai didi

java - 从不同线程写入 Netty ChannelHandlerContext

转载 作者:行者123 更新时间:2023-12-02 12:45:58 25 4
gpt4 key购买 nike

我正在使用 Netty 制作实时游戏,并且我有一个关于在不同于 ChannelHandler 所在线程的 ChannelHandlerContext 上使用 write 方法的问题.

我在 Java 应用程序中有一个单独的线程池,我将从数据库中提取数据并执行游戏逻辑。我想使用 BlockingQueue 将请求提交到不同的线程,以传递 ChannelHandlerContext 和玩家发送的数据。然后该线程将基于此更改游戏状态。完成后,我希望能够使用 ChannelHandlerContext write 方法向用户写回更改后的游戏状态的响应。

如果我从单独的游戏逻辑线程执行此操作,我不希望写入函数给该线程带来负担。如果我从那里调用 write,它会生成自己的线程、使用游戏逻辑线程还是使用 ChannelHandler 的线程?

最佳答案

在这种情况下,将使用 ChannelHandler 线程。这是因为 ChannelHandlerContext.write 方法会检查您所在的线程。如果从外部线程(而不是事件执行器线程)调用 ctx.write 方法,则 ctx.write 操作将被提交到属于您的上下文的线程。

实际发生的情况可以简单地描述如下:

gameLogicPool.send(new Runnable() {
//your logic here
ctx.write(response);
//ctx.write actually does this when executed from another thread:
ctx.executor().execute(new Runnable() {
//write happens here when you are in event executor already
}
);
}
);

关于java - 从不同线程写入 Netty ChannelHandlerContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44782682/

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