Node.js 工作者/后台进程
Posted
技术标签:
【中文标题】Node.js 工作者/后台进程【英文标题】:Node.js workers/background processes 【发布时间】:2011-06-13 07:38:09 【问题描述】:如何在 node.js 中创建和使用后台作业?
我遇到了两个库(node-resque 和 node-worker),但想知道是否还有更多用处。
【问题讨论】:
【参考方案1】:我对此进行了一些研究,我会这样做。
设置
豆茎
安装beanstalkd。另一个消息队列,但是这个支持DELAYED PUTS。如果你从源代码编译它会有点困难,因为它依赖于libevent(如 memcached)。但话又说回来,我认为您不必从源代码编译它,因为有很多 binary packages 可用。例如,在 Ubuntu 上,您可以通过发出以下命令来安装 beanstalkd:
sudo apt-get install beanstalkd
node-beanstalk-client
安装 beanstalkd 客户端库。我找到的最好的一个是node-beanstalk-client。因为在 beanstalkd 客户端库列表中没有/没有提到这个库(然后我可以再次将条目添加到列表中,所以我将添加这个)。我更喜欢这个库的原因是:
-
npm 包:我喜欢使用 npm 包来安装客户端库。其他人没有。
积极开发:我更喜欢具有较晚/更多提交的库。
所以要安装它,在你安装npm(the write way) 之后,你只需发出以下命令:
npm install beanstalk_client
代码
consumer.js
var client = require('beanstalk_client').Client;
client.connect('127.0.0.1:11300', function(err, conn)
var reserve = function()
conn.reserve(function(err, job_id, job_json)
console.log('got job: ' + job_id);
console.log('got job data: ' + job_json);
console.log('module name is ' + JSON.parse(job_json).data.name);
conn.destroy(job_id, function(err)
console.log('destroyed job');
reserve();
);
);
reserve();
);
首先启动消费者:
node consumer.js
下一个开始producer.js
。在您执行producer.js
后五秒(我指定的延迟),consumer.js
将处理该消息。
producer.js
var client = require('beanstalk_client').Client;
client.connect('127.0.0.1:11300', function(err, conn)
var job_data = "data": "name": "node-beanstalk-client";
var priority = 0;
var delay = 5;
var timeToRun = 1;
conn.put(priority, delay, timeToRun, JSON.stringify(job_data), function(err, job_id)
console.log('put job: ' + job_id);
process.exit();
);
);
开始发布:
node producer.js
【讨论】:
对不起阿尔弗雷德。我真的忘记将其标记为正确。!谢谢! @Editor 谢谢:)。 @Donald没问题:)。太好了,这对您有帮助!【参考方案2】:我正在使用Kue。
Kue 是一个由 redis 支持的 node.js 的功能丰富的优先级作业队列。 Kue 的一个关键特性是其简洁的用户界面,用于查看和管理排队、活动、失败和已完成的作业。
【讨论】:
以上是关于Node.js 工作者/后台进程的主要内容,如果未能解决你的问题,请参考以下文章