2016-09-14 62 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