8

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

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

4

3 回答 3

11

很大程度上取决于任务是什么。如果我理解您的问题,您可以通过两种方式执行此操作: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,因为节点是单线程的。还应该注意的是,在某些情况下可能有更好的方法来做到这一点。例如,在基于云的 webapp 中,我可能依赖 PAAS 的服务来运行后台任务。您可能还想查看https://github.com/nodejitsu/forever-monitor

这是一篇关于如何在 webapps 中处理后台作业的好文章。https://devcenter.heroku.com/articles/background-jobs-queueing但是,它不是特定于节点的。它也特定于 Heroku 平台。

于 2013-10-13T19:16:42.437 回答
1

您可以使用标准setTimeout()方法。

function task() {
  console.log("Timer");
  setTimeout(task, 5000);
}

task();
于 2013-10-13T19:14:46.050 回答
0

看看Kue - https://github.com/LearnBoost/kue 这是一个易于使用的节点消息队列系统。基本上,您将拥有一个将事物放入队列的节点程序,以及处理队列的其他进程。

因此,任务 A 将每 5 秒运行一次(如果您愿意,可以使用 cron 或其他系统)。它会查看队列并处理相关项目。其他n 个工作人员将为 Kue 共享配置,但只会推送事件。

于 2014-08-27T13:47:32.730 回答