Как реализовать socket.io с помощью кластера? - PullRequest
0 голосов
/ 11 января 2019

Я разрабатывал приложение в реальном времени с использованием socket.io. При использовании кластера моя программа socket.io не работает должным образом.

Мой код:

var cluster = require('cluster');
var cpuNum = require('os').cpus().length;
var http = require('http');

var port=5001, server;

var realTimeCount = require('.app/rT_event_count');


if (cluster.isMaster) {
  // fork workers
  logger.infoLogger('Number of fork workers: ' + cpuNum);

  for (let i = 0; i < cpuNum; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    logger.errorLogger('worker ' + worker.process.pid + ' died');
  });
} else {

  var app = router.getRouter();

  server = http.Server(app);
  server.listen(port,function(){
    console.log('listening on *:'+port);
  });

  //the following function consist of socket io program
  realTimeCount.getRealTimeUnseenEventCount(server);

}

Я получил сообщение о подключении через сокет, но не получил ни одного события, которое отправлял со стороны клиента на сторону сервера.

Но, моя программа отлично работает без использования кластера. Но я хочу реализовать это с кластером.

а у меня вопрос, почему я не получил ни одного события со стороны клиента?

Я видел один ответ на вопрос:

Socket.io выполняет несколько запросов для установления связи и установления соединения с клиентом. В кластере эти запросы могут поступать разным работникам, что нарушает протокол рукопожатия.

Это правильно? и подскажите как решить эту проблему?

...