如何让我的NodeJS应用程序永远在循环中运行
我已经写了一个NodeJS应用程序调用一个API,并在特定的时间仅在工作日发布到端点。
我可以设置一个cron作业来在指定的时间运行应用程序,但我宁愿运行它与node index.js
并不断运行,什么也不做,直到它是正确的一天和时间,然后回到“睡眠”直到第二天。
我如何做到这一点? 我试了一下while循环:
while (true) { myApp.run(); }
显然那不太好。
什么是正确的方法来做到这一点? 我应该重写我的模块使用事件,以便我发出一个时间,并有一个对它作出反应的监听器?
– 编辑:更具体地说,我希望它以类似的方式运行在其中的Web服务器的应用程序。 当你启动应用程序,它正在运行,并等待连接; 它在请求和连接结束时不会退出,它仍然在等待更多的请求和连接。
– 编辑2:我宁愿不使用cron的原因是因为运行的日子和时间可以在appparsing的config.json
文件中configuration。 我宁愿避免与cron
混淆,只需通过编辑config.json
文件来更改计划。
– 编辑3:我想自己编码,而不是使用模块。 当我试图编写一个永远运行的应用程序时,我的大脑总是很痛苦,我想了解它是如何完成的,而不是使用一个模块。
– 编辑4:这是我最终使用:
function doStuff() { // code to run }; function run() { setInterval(doStuff, 30000); }; run();
那么你总是可以使用一个简单的setInterval :
function execute(){ //code to execute } setInterval(execute,<calculate time interval in milliseconds you want to execute after>);
这是一个非常基本的方式来做到这一点。 希望这可以帮助。
你可以试试这个工具https://www.npmjs.com/package/forever 。 使用非常简单:
只需运行你的脚本forever start app.js
,
NPM来拯救;)
节点时间表
你可以使用cron模块。 对于时间和数据,你可以从你的configuration文件加载,而不需要在代码中进行硬编码。
例:
var CronJob = require('cron').CronJob; var job = new CronJob({ cronTime: '00 30 11 * * 1-5', onTick: function() { /* * Runs every weekday (Monday through Friday) * at 11:30:00 AM. It does not run on Saturday * or Sunday. */ }, start: false, timeZone: 'America/Los_Angeles' }); job.start();
所以这里是我如何解决它,因为@AJSbuild议:
function myApp() { while (!isItTimeYet) { setInterval(myApp, 59000); } }
这比我想象的更简单,希望它不会泄漏内存。
– 编辑:这是错误的,并泄漏内存,因为每个循环使其更深一层。 这是方式:
function doStuff() { // code to run }; function run() { setInterval(doStuff, 30000); }; run();
while (true)
在使用IO操作的node.js中受到限制,因为它会阻塞事件循环并阻止所有callback被调用。 如果你想永远做一些事情,你需要使用recursion:
function func_run () { // code here //... func_run(); }