gpt4 book ai didi

javascript - 由于多个请求,对 Node.js 服务器的请求超时

转载 作者:行者123 更新时间:2023-12-03 16:38:45 24 4
gpt4 key购买 nike

所以我对 Node 不是很有经验,所以请多多包涵。

我在 node.js 服务器上有 2 条路由。在典型的一天中,两条路线将同时受到请求的影响。路线 1 将顺利运行,但路线 2 是一个长时间运行的进程,会返回多个 promise ,因此路线 1 将占用资源导致路线 2 暂停(我已确定这是通过数据日志发生的)。

路线 1 如下所示:

  app.post('/route1', function (req, res) {
doStuff().then(function(data){
res.end();
})
}

路由 2 正在处理需要解析的数据数组,因此一次处理数组中的 1 条记录

app.post('/route2', function (req, res){
async function processArray(array) {
for (const item of array) {
await file.test1()(item, res);
await file.test2()(item, res);
//await test3,test4,test5,test6
}
}
processArray(data).then(function() {
res.end();
}
}

所以我猜问题是 async/await 在继续处理记录之前正在等待资源变得可用。
有没有办法让我把它写到 route1 不会干扰 route2 的地方?

最佳答案

在 Node 中,您可以await(或调用then)的几乎所有事情都是异步的。它不会阻塞执行线程,而是将任务卸载到您无法控制的另一层,然后等待它完成,同时可以自由地处理其他事情。这包括处理文件系统和网络请求。仍然有一些方法可以阻止线程,例如,使用文件系统方法的同步版本(如 readFileSync 而不是 readFile)或在 javascript 上进行大量计算(如计算阶乘4569485960485096)

鉴于您的 route1 不执行任何这些操作,它不会从 route2 获取任何资源。它们并行运行。没有看到实际的代码很难说,但我很确定你正在连接超时,因为你的 route2 写得不好,并且由于与 Node 无关的原因需要很长时间才能解决(或根本不解决)性能或阻塞。 Node 正在等待您的文件系统在每个数组项(或那里发生的任何事情)中运行这些无休止的测试 6 次,而当这种情况发生时,浏览器停止等待响应并显示连接超时。您很可能不需要等待数据中每个数组的每个测试,而不仅仅是并行运行它们

在这里阅读更多 https://nodejs.org/en/docs/guides/blocking-vs-non-blocking/在这里 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

关于javascript - 由于多个请求,对 Node.js 服务器的请求超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60571525/

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