События Nodejs, записанные в любом процессе кластера, отправленном из файла создания кластера

Я застрял здесь из-за простой проблемы, связанной с событием. Вот проблема:

  • Я создал кластер с использованием cluster.js и разветвленный server.js из cluster.js.
  • Я поставил таймер из cluster.js и через каждые 1 минуту я запускаю событие "testTimer". Я использовал файл событий, чтобы сделать
    Это.
  • Я пытаюсь захватить это событие "testTimer" от ребенка
    обработать, используя тот же файл, который я импортировал в server.js, и выполнить.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 ответ

Решение

Экземпляры 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);
  }
})
Другие вопросы по тегам