【发布时间】:2014-06-10 15:22:24
【问题描述】:
我正在为我的 webapp 使用带有 express 的 nodejs,我需要连续运行 一些代码检查某些数据是否更改,然后更新我的 mongodb。
如何轻松创建一个与主要任务一起运行的后台进程?这样后台任务/进程就可以通知主任务了。
我已经尝试过的:
- 在主进程中使用“setInterval”函数解决这个问题 --> 我工作没有问题,但认为这不是一个好主意,因为它阻塞了节点事件循环
- 使用子进程 -> 我找不到关于它们的好教程 -> 有没有更简单的方法,也许是可以帮助我的库?
- 一些后台工作库 -->但是在子进程上执行繁重的任务并完成,但我需要一直做这项工作
更新:
最终解决方案:
UpdateEvent.js:
var events = require('events');
function Updater(time) {
this.time = time;
this.array = [
{number: 1},
{number: 2}
];
var that;
events.EventEmitter.call(this);
this.init = function()
{
that = this;
console.log("Contructor");
//Start interval
setInterval(that.run,that.time);
};
this.run = function()
{
that.array.forEach(function (item) {
if(item.number === 2)
{
that.emit('Event');
}
});
};
}
Updater.prototype.__proto__ = events.EventEmitter.prototype;
module.exports = Updater;
然后是使用它的代码:
server.js:
var Updater = require('./UpdaterEvent');
var u = new Updater(10000);
u.init();
u.on('Event',function () {
console.log("Event catched!");
});
我按照以下教程进行操作: http://www.sitepoint.com/nodejs-events-and-eventemitter/
【问题讨论】:
-
后台任务CPU重吗?