从群集创建文件

时间:2017-04-26 13:44:01

标签: node.js events node-cluster

由于简单的事件相关问题,我被困在这里。这是问题所在:

  • 我使用cluster.js和forked server.js创建了一个集群 cluster.js。
  • 我已经从cluster.js中放了一个计时器,我每隔1分钟就放一个计时器 触发事件'testTimer'。我用事件文件做了 它。
  • 我试图从孩子那里捕获这个'testTimer'事件 使用我导入到server.js并执行的相同文件的进程 a .on('testTimer',callback)

但是,事件不会在任何进程中捕获。我尝试将事件设置为全局并将事件全局分配给符号,但也无法使其工作/捕获事件。

以下是代码:

cluster.js(子进程创建者)

...require > events.js...
... create cluster logic...
setInterval(function () {
 evt.emit('testTimer', {tester: 'test'});
 evt.tester();
}, 1000);

server.js(子进程)

...require > events.js...
evt.on('testTimer', function (data) {

    console.log('Starting Sync ', data);
});

events.js(事件的通用文件)

var util         = require("util");
var EventEmitter = require("events").EventEmitter;

function test () {
    EventEmitter.call(this);
}
test.prototype.tester = function (){
    this.emit('testTimer', {missed: 'this'})
}
util.inherits(test, EventEmitter);
module.exports = test;

1 个答案:

答案 0 :(得分:2)

EventEmitter实例无法超出进程的范围。如果您想在父母和子女之间进行交流,请使用worker.send()

// cluster.js
setInterval(function () {
  for (const id in cluster.workers) {
    cluster.workers[id].send({ type : 'testTimer', data : { tester : 'test' }});
  }
}, 1000);

// server.js
process.on('message', function(message) {
  if (message.type === 'testTimer') { 
    console.log('Starting Sync ', message.data);
  }
})