【发布时间】:2015-04-14 05:01:47
【问题描述】:
我有一个使用以下代码运行的服务器。我希望函数callAPI 每两秒调用一次,原谅凌晨 2:00-5:18 之间的时间。 API 报告说我每天进行超过 37,260 次 API 调用(0.5 次调用/秒 * 60 秒/分钟 * 60 分钟/小时 * (24-3.3) 小时)。为什么这会导致函数 callAPI 每天运行超过 37,260 次?
function callAPI(callback) {
// Do API call
callback()
}
function timer() {
var d = new Date();
var hour = d.getHours();
if (hour == 2) {
setTimeout(function() {
callAPI(timer);
}, 1000 * 60 * 60 * 3.3); // Set timeout to 3.3 hours (resumes at 5:18)
} else {
setTimeout(function() {
callAPI(timer);
}, 2000); // 2 seconds
}
}
callAPI(timer)
【问题讨论】:
-
它是如何运行的 - 是否可以多次触发?
-
API 说您使用了多少?您应该在这里使用 setInterval 而不是 setTimeout。
-
您正在运行多少个节点应用程序实例?你应该确保你只运行一个实例。另外,我会使用winstongithub.com/winstonjs/winston之类的库将每个请求记录到文件中,以确定它发生的原因和时间
-
@TristanFoureur Node 是否比浏览器更好地处理 setInterval?因为如果你在调用 setInterval 之间有准确的间隔,那么在做这样的事情时通常最好避免。尽管我认为这实际上取决于该功能的作用以及 OP 在重叠方面的作用和不希望发生的情况
-
@SmokeyPHP 我通过 PM2 (github.com/Unitech/pm2) 生成服务器。 TristanFoureur,API 在极限处切断,所以我看不到确切的数字。 Charbz,我只通过这个运行一个实例。感谢温斯顿的推荐——我会调查的。
标签: javascript node.js