Sto cercando di ottenere Socket.io per lavorare multi-threaded con native load balancing ("cluster") in Node.js v.0.6.0 e versioni successive.Node.js, multi-threading e Socket.io
Da quello che ho capito, Socket.io utilizza Redis per memorizzare i suoi dati interni. La mia comprensione è questa: invece di generare una nuova istanza di Redis per ogni lavoratore, vogliamo forzare i lavoratori ad usare la stessa istanza di Redis del master. Pertanto, i dati di connessione sarebbero condivisi tra tutti i lavoratori.
Qualcosa di simile nel master:
RedisInstance = new io.RedisStore;
Il dobbiamo in qualche modo passare RedisInstance
ai lavoratori e procedere come segue:
io.set('store', RedisInstance);
Ispirato this implementation utilizzando il vecchio, il modulo gruppo 3a parte , Ho la seguente implementazione non funzionante:
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);
})
});
}
Pensieri? Potrei andare completamente nella direzione sbagliata, qualcuno può indicare alcune idee?
mi chiedo quale approccio si finisce per utilizzare. –