Socket.io domyślnie używa MemoryStore, więc wszyscy połączeni klienci będą przechowywani w pamięci, co uniemożliwi (no cóż, nie ciche, ale o tym później) wysyłanie i odbieranie zdarzeń od klientów podłączonych do innego serwera socket.io.
Jednym ze sposobów, aby wszystkie serwery socket.io otrzymywały wszystkie zdarzenia, jest to, że wszystkie serwery używają pub-sub redis. Tak więc, zamiast używać socket.emit, można publikować na redis.
redis_client = require('redis').createClient();
redis_client.publish('channelName', data);
Wszystkie serwery z gniazdami subskrybują ten kanał przez redis i po otrzymaniu wiadomości wysyłają ją do podłączonych do nich klientów.
redis_sub = require('redis').createClient();
redis_sub.subscribe('channelName', 'moreChannels');
redis_sub.on("message", function (channel, message) {
socket.emit(channel, message);
});
Skomplikowane rzeczy !! Ale poczekaj, okazuje się, że tak naprawdę nie potrzebujesz tego rodzaju kodu, aby osiągnąć cel. Socket.io ma RedisStore, który zasadniczo robi to, co powyższy kod ma robić w lepszy sposób, dzięki czemu można pisać kod Socket.io tak, jak pisałbyś dla pojedynczego serwera i nadal będzie propagowany na inny serwer Socket.io redys.
Podsumowując, socket.io wysyła wiadomości na wiele serwerów, używając redis jako kanału zamiast pamięci.