gpt4 book ai didi

node.js - 如何防止while循环卡住node.js?

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

说明:
我的 node.js 后端应用程序生成的游戏结果取决于物理引擎算法。服务器快速生成游戏结果,通过while运行游戏物理循环并发送给客户。当客户获得游戏结果时,他们会以 60 FPS 的速率运行游戏循环并为该结果设置动画。

问题:while循环卡住 node.js,同时生成结果。这个应用程序还负责 REST API,原因是它也被卡住,直到 while循环将完成游戏结果生成。

好吧,也许有一些解决方案可以运行 while环形?也许创建其他进程并从主应用程序访问它,或者......?

最佳答案

正如您所发现的,nodejs 非常不适合运行超过一两毫秒的计算。它有一个主循环,用于调用回调、事件和等待操作( promise 解决或拒绝)。

如果你从这些回调/事件/任何一个中调用一个长时间运行的函数,它会阻塞主循环直到它完成,所以 nodejs 等待处理下一个操作。这会让您的应用程序感觉缓慢而笨拙。这种一次一个事件的操作是 Javascript 固有的。

有几种方法可以管理这个。到目前为止,最好的办法是弄清楚如何让您的客户端代码在用户的机器上运行,以进行像游戏物理这样的繁重计算。这意味着重新思考系统的设计。这也意味着您可以为您的物理引擎支付电费,如果您有很多用户,这总是一个明智的举动。

您可以切换到具有轻量级线程的语言来对您的服务器进行编程。 Java 和 C# 是合理的选择,golang 也可以。

您可以分解长时间运行的计算并异步执行它们,如下所示:

async function comp () {
while (computationNotDone) {
await doChunkOfComputation()
}
}

await 操作让 Node 重新激活其主循环。您的计算块轮到其他事件和回调。

您还可以尝试 Node 工作线程。解释这超出了 StackOverflow 答案的范围。

看看这个 How can I prevent while loop freeze node.js?

关于node.js - 如何防止while循环卡住node.js?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61853972/

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