使用Node JS运行连续的后台作业

时间:2013-10-13 19:12:39

标签: javascript node.js

考虑任务A和其他n个任务。我想和其他n个任务并行运行任务A.任务A只是每隔5秒从队列中获取数据。

我是Node JS的新手。有没有办法在后台运行此任务/作业A还是有任何解决方案?

3 个答案:

答案 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的配置,但只会推送事件。