0

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

  • 我使用 cluster.js 和从 cluster.js 分叉的 server.js 创建了一个集群。
  • 我从 cluster.js 中放置了一个计时器,每 1 分钟我触发一个事件“testTimer”。我使用了一个事件文件来做到
    这一点。
  • 我正在尝试
    使用我已导入 server.js 并执行 .on('testTimer', callback) 的同一文件从子进程中捕获此事件“testTimer”

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

这是代码:

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;
4

1 回答 1

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);
  }
})
于 2017-04-26T14:00:28.477 回答