gpt4 book ai didi

node.js - Node.js 脚本永远挂起循环

转载 作者:太空宇宙 更新时间:2023-11-03 22:22:13 24 4
gpt4 key购买 nike

我制作了一个 Node.js 脚本,用于检查 MySQL 数据库中的新条目,并使用 socket.io 将数据发送到客户端的 Web 浏览器。该脚本大约每 2 秒检查一次新条目。我使用 Forever 来保持脚本运行,因为它托管在 VPS 上。

我相信发生的事情是 for 循环无限循环(更多关于为什么我认为这是下面的问题)。 Forever 生成的日志文件中没有错误消息,并且即使脚本开始挂起,脚本也在“运行”。具体来说,脚本中挂起的部分是脚本停止在端口 8888 上接受浏览器请求,并且不为客户端 socket.io js 文件提供服务。我已经完成了一些故障排除,并确定了一些可能导致此问题的关键组件,但最终,我不确定为什么会发生这种情况,并且似乎无法找到解决方法。

这是代码的相关部分:

http.listen(8888,function(){
console.log("Listening on 8888");
});

function checkEntry() {
pool.getConnection(function(err,connection) {
connection.query("SELECT * FROM `data_alert` WHERE processtime > " + (Math.floor(new Date() / 1000) - 172800) + " AND pushed IS NULL", function (err, rows) {
connection.release();
if (!err) {
if(Object.keys(rows).length > 0) {
var x;
for(x = 0; x < Object.keys(rows).length; x++) {
connection.query("UPDATE `data_alert` SET pushed = 1 WHERE id = " + rows[x]['id'],function() {
connection.release();
io.emit('refresh feed', 'refresh');
});
}
}
}
});
});
setTimeout(function() { checkEntry();var d = new Date();console.log(d.getTime()); },1000);
}

checkEntry();

我在解决问题时发现的一些有趣的事情......

  • 只有当我在 Forever 上运行脚本时才会发生这种情况。如果我使用 shell 并且让终端保持打开状态,工作就完全没问题。
  • 它在运行脚本 5-30 分钟后开始发生,它不会在第一次执行 checkEntry 函数时立即挂起。
  • 我最初尝试使用 setInterval 而不是 setTimeout,但问题仍然完全相同。
  • 如果我删除 setInterval/setTimeout 函数并仅运行 checkEntry 函数一次,它不会挂起。
  • 如果我在 checkEntry 函数中取出 JavaScript for 循环,挂起就会停止(但显然,for 循环控制必要的功能,所以我至少必须找到另一种使用它的方法)。
  • 我还尝试对 rows 对象使用 for-in 循环,性能完全相同。

此时任何想法都会非常有帮助。我最近才开始使用 Node.js,所以我在这里错过的可能是一个显而易见的原因。

谢谢。

最佳答案

所以我只是想回到这个问题并解决问题所在。我花了很长时间才弄清楚,这只能用我自己的经验不足来解释。我的脚本中有一个部分,其中我的代码包含以下内容:

app.get("/", (request, response) => {
// Some code to log things to the console here.
});

问题是我没有发送回复。新代码如下所示并解决了我的挂断问题:

app.get("/", (request, response) => {
// Some code to log things to the console here.
response.send("OK");
});

该问题与我在最初问题中提供的代码部分无关。

关于node.js - Node.js 脚本永远挂起循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53106480/

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