Socket.io bruger MemoryStore som standard, så alle de tilsluttede klienter vil blive gemt i hukommelsen, hvilket gør det umuligt (vel, ikke stille, men mere om det senere) at sende og modtage begivenheder fra klienter, der er tilsluttet en anden socket.io-server.
En måde at få alle socket.io-servere til at modtage alle hændelser er, at alle servere bruger redis' pub-sub. Så i stedet for at bruge socket.emit kan man publicere til redis.
redis_client = require('redis').createClient();
redis_client.publish('channelName', data);
Og alle socket-servere abonnerer på den kanal gennem redis og udsender den til klienter, der er tilsluttet dem, når de modtager en besked.
redis_sub = require('redis').createClient();
redis_sub.subscribe('channelName', 'moreChannels');
redis_sub.on("message", function (channel, message) {
socket.emit(channel, message);
});
Komplicerede ting!! Men vent, det viser sig, at du faktisk ikke har brug for denne slags kode for at nå målet. Socket.io har RedisStore, som i det væsentlige gør, hvad koden ovenfor skal gøre på en bedre måde, så du kan skrive Socket.io-kode, som du ville skrive for en enkelt server og stadig vil blive spredt over til andre socket.io-servere gennem redis.
For at opsummere sender socket.io beskeder på tværs af flere servere ved at bruge redis som kanal i stedet for hukommelse.