考虑任务A和其他n个任务。我想和其他n个任务并行运行任务A.任务A只是每隔5秒从队列中获取数据。
我是Node JS的新手。有没有办法在后台运行此任务/作业A还是有任何解决方案?
答案 0 :(得分:10)
取决于任务是什么。如果我理解你的问题,你可以这两种方式:1,用计时器运行一个函数,2,生成一个子进程。
1
function taskA(){...}
setInterval(taskA,5000);
2
//same code as 1, but in a child process
var spawn = require('child_process').spawn,
ls = spawn('taskA.js');
//taskA.js has the code from example 1
如果您在主进程中执行了很多其他操作,则可能更喜欢2比1,因为node是单线程的。还应该指出,在某些情况下可能有更好的方法来做到这一点。例如,在基于云的Web应用程序中,我可能依赖PAAS的服务来运行后台任务。您还可以查看https://github.com/nodejitsu/forever-monitor
这是一篇关于如何在webapps中处理后台作业的精彩文章。 https://devcenter.heroku.com/articles/background-jobs-queueing然而,它不是特定于节点的。它也是Heroku平台特有的。
答案 1 :(得分:1)
您可以使用标准setTimeout()
方法。
function task() {
console.log("Timer");
setTimeout(task, 5000);
}
task();
答案 2 :(得分:1)
看看Kue - https://github.com/LearnBoost/kue 这是一个易于使用的节点消息队列系统。基本上你有一个节点程序将事物放入队列,以及其他处理队列的进程。
因此,任务A将每5秒运行一次(cron,如果你喜欢,或其他系统)。它将查看队列并处理相关项目。其他 n 工作人员将共享Kue的配置,但只会推送事件。