我期待在Node.js v.0.6.0和更高版本中使Socket.io與native load balancing(「集羣」)工作多線程。Node.js,多線程和Socket.io
據我所知,Socket.io使用Redis來存儲其內部數據。我的理解是這樣的:我們不想爲每個工作人員產生一個新的Redis實例,而是要強制員工使用與Master相同的Redis實例。因此,連接數據將在所有員工中共享。
像這樣的事情在主人:
RedisInstance = new io.RedisStore;
的,我們必須以某種方式通過RedisInstance
工人並執行以下操作:使用舊,第三方集羣模塊
io.set('store', RedisInstance);
靈感來自this implementation ,我有以下非工作實現:
var cluster = require('cluster');
var http = require('http');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// Fork workers.
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
var sio = require('socket.io')
, RedisStore = sio.RedisStore
, io = sio.listen(8080, options);
// Somehow pass this information to the workers
io.set('store', new RedisStore);
} else {
// Do the work here
io.sockets.on('connection', function (socket) {
socket.on('chat', function (data) {
socket.broadcast.emit('chat', data);
})
});
}
想法?我可能會完全向錯誤的方向發展,任何人都可以指出一些想法?
我不知道什麼接近你最終使用。 – 2013-06-03 19:04:37