Szukam, aby Socket.io działał wielowątkowo z native load balancing ("cluster") w Node.js w wersji 0.6.0 i nowszych.Node.js, multi-threading i Socket.io
Z tego co rozumiem, Socket.io używa Redis do przechowywania swoich wewnętrznych danych. Moje rozumienie jest następujące: zamiast tworzenia nowej instancji Redis dla każdego pracownika, chcemy zmusić pracowników do korzystania z tej samej instancji Redis, co master. W związku z tym dane dotyczące połączenia będą udostępniane wszystkim pracownikom.
Coś takiego w Master:
RedisInstance = new io.RedisStore;
musimy jakoś przejść RedisInstance
do robotników i wykonaj następujące czynności:
io.set('store', RedisInstance);
Zainspirowany this implementation pomocą starego, moduł klastra 3rd party Mam następujące niedziałające wdrożenie:
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);
})
});
}
Myśli? Być może idę całkowicie w złą stronę, czy ktoś może wskazać jakieś pomysły?
Zastanawiam się jakie podejście kończy się użyciem. –