2016-09-14 1 views
0

У меня есть cluster.js со следующим кодом:Socket.io не работает с узлом кластера

var numOfCpus = 16; 
var cluster = require('cluster'); 
if (cluster.isMaster) { 
    for (var i = 0; i < numOfCpus; i++) { 
     cluster.fork(); 
    } 
    console.log("master is running"); 
} else { 
    console.log('Worker %d started', cluster.worker.id); 

    var server = app.listen(8887); 
    var io = require('socket.io').listen(server); 

    var live_data = io.of('/live_data'); 
    live_data.on('connection',function(socket){ 
     console.log('Connected: %s', socket.id); 
    }); 
} 

Мой клиент приложение отлично работает, когда numOfCpus = 1 в cluster.js. Когда у меня есть нечто большее, чем 1, то socket.io начинает давать следующее сообщение об ошибке:

enter image description here

Должен ли я сделать что-нибудь особенное, чтобы сделать Socket.io работу с несколькими рабочими узла? Любая помощь будет высоко оценена. Благодарю.

+1

[это] (https: // GitHub. com/indutny/sticky-session #) может представлять интерес. – robertklep

ответ

1

Проблема была решена с использованием липкого сеанса, как указано robertklep, в комментарии. Однако пакет, который я использовал для этой цели, - socketio-sticky-session.

Мой Окончательный код cluster.js выглядит следующим образом:

var sticky = require('socketio-sticky-session') 
var cluster = require('cluster'); 
var os = require('os'); 
var options = { 
    proxy: false, 
    num: require('os').cpus().length 
} 

var server = sticky(options, function() { 

    var server = app.listen(); 
    var io = require('socket.io').listen(server); 

    var live_data = io.of('/live_data'); 
    live_data.on('connection',function(socket){ 
     console.log('Connected: %s', socket.id); 
    }); 

    return server 

}).listen(8887, function() { 
console.log((cluster.worker ? 'WORKER ' + cluster.worker.id : 'MASTER') + ' | HOST ' + os.hostname() + ' | PORT ' + 8887) 
}) 

Подробная информация о рабочей и реализации липких сессий можно прочитать @https://github.com/elad/node-cluster-socket.io