2017-06-18 82 views
-1

我创建一个节点的应用程序中,为每个请求我打电话定期节点应用程序可以处理多少个setInterval()函数?

功能app.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); 

每当有到应用程序的请求,我打电话了ping功能每30分钟

做一个节点的应用程序可以处理更多的setInterval()?

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

+1

您可能正在寻找[cron任务](https://github.com/kelektiv/node-cron)。 –

回答

1

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

nodejs旨在处理大量定时器(至少数十万)。

所以,setInterval()定时器少数是完全没有问题。但是,添加一个永久运行的新时间间隔,每次路由被击中时,对我来说似乎都是一个错误,因为他们会无限期地积累,直到您的服务器重新启动。

如果您更详细地描述了什么问题,你真的是在努力解决,我们可以帮你找到一个合适的方式代码。你现在拥有的只是一次又一次地运行一个request(),并没有对结果做任何事情,每当你的路线再次被击中时,它就会启动整个事情再次运行,所以你有多次运行它的实例。这看起来像一个错误的设计。

下面是指向信息有关的计时器是如何设计的另一个的NodeJS答案:How many concurrent setTimeouts before performance issues?

它是很好用的setTimeout()代替的setInterval()?

它不会改变你的可扩展性。有不同的设计理由使用重复的setTimeout()setInterval(),但都不会改变你的核心问题。

+0

@GaNeShKuMaRm - 这是否回答你的问题? – jfriend00

相关问题