一个节点应用程序可以处理多少个 setInterval() 函数?



我正在创建一个节点应用程序,其中对于每个请求,我都会定期调用一个函数

应用.js

var express = require('express');
var request = require('request');
var bodyParser = require('body-parser');
var app = express();
const PORT = process.env.port || 1234
app.listen(PORT, () => { console.log(`Server running at ${PORT} ...`)} );   

var router = express.Router();
function ping(i, appURL) 
{
request(appURL, function (error, response, body) {
console.log('i:', i ++ ,'url: ', appURL, 'statusCode:', response && response.statusCode, 'Time: ', new Date()); 
});
}
router.route('/')
.post(function(req, res) {
var appURL = req.body.url;
var i = 1;
ping(i, appURL);
setInterval(function() {
request(appURL, function (error, response, body) {
ping(i, appURL);
});
}, 1800000);
res.end('Success');
});
app.use(bodyParser.json());
app.use('/', router);

每当有对应用程序的请求时,我每30 分钟调用一次ping函数。

节点应用程序是否可以处理更多的 setInterval()?

使用 setTimeout() 而不是 setInterval() 好吗?

一个节点应用程序可以处理多少个 setInterval() 函数?

NodeJS旨在处理大量计时器(至少数十万个)。

因此,少量的setInterval()计时器是完全可以的。 但是,添加一个每次路由被命中时永久运行的新间隔对我来说似乎是一个错误,因为它们只会无限期地累积,直到您的服务器重新启动。

如果您更详细地描述您真正想要解决的问题,我们可以帮助您找到适当的编码方法。 你现在拥有的,只是一遍又一遍地运行一个request(),并且对结果没有任何作用,每次你的路线再次被击中时,它都会再次开始整个运行,所以你有多个实例一遍又一遍地运行。 这看起来像是一个错误的设计。

下面是另一个答案,指向有关如何在 nodejs 中设计计时器的信息:在出现性能问题之前有多少个并发设置超时?

使用 setTimeout() 而不是 setInterval() 好吗?

无论哪种方式,它都不会改变您的可扩展性。 使用重复setTimeout()setInterval(),但两者都不会改变你的核心问题。

最新更新