Я разрабатывал приложение в реальном времени с использованием 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 выполняет несколько запросов для установления связи и установления соединения с клиентом. В кластере эти запросы могут поступать разным работникам, что нарушает протокол рукопожатия.
Это правильно? и подскажите как решить эту проблему?