2016-09-14 94 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); 
    }); 
} 

我的客戶端應用程序工作正常時cluster.js的numOfCpus = 1。當我有超過1東西越多,socket.io開始給予以下錯誤:

enter image description here

我必須做什麼特別的製作與多個節點工人socket.io工作?任何幫助將不勝感激。謝謝。

+1

[這](https://開頭github上。 com/indutny/sticky-session#reasoning)可能是有趣的。 – 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