Estoy buscando que Socket.io trabaje en subprocesos múltiples con native load balancing ("clúster") en Node.js v.0.6.0 y posterior.Node.js, multi-threading y Socket.io
Según tengo entendido, Socket.io usa Redis para almacenar sus datos internos. Según tengo entendido, en lugar de generar una nueva instancia de Redis para cada trabajador, queremos obligar a los trabajadores a utilizar la misma instancia de Redis que el maestro. Por lo tanto, los datos de conexión se compartirían entre todos los trabajadores.
Algo como esto en el maestro:
RedisInstance = new io.RedisStore;
La tenemos que de alguna manera pasar RedisInstance
a los trabajadores y hacer lo siguiente:
io.set('store', RedisInstance);
Inspirado por this implementation utilizando el módulo de clúster tercera parte vieja , Tengo la siguiente implementación no operativa:
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);
})
});
}
¿Pensamientos? Podría estar yendo por completo en la dirección equivocada, ¿alguien puede señalar algunas ideas?
me pregunto qué enfoque que terminan usando. –