Socket.io standardně používá MemoryStore, takže všichni připojení klienti budou uloženi v paměti, což znemožňuje (no, ne tiché, ale o tom později) odesílat a přijímat události od klientů připojených k jinému serveru socket.io.
Jedním ze způsobů, jak zajistit, aby všechny servery socket.io přijímaly všechny události, je, že všechny servery používají redis's pub-sub. Takže místo toho pomocí socket.emit lze publikovat do redis.
redis_client = require('redis').createClient();
redis_client.publish('channelName', data);
A všechny soketové servery se přihlásí k odběru tohoto kanálu prostřednictvím redis a po obdržení zprávy ji odešlou klientům, kteří jsou k nim připojeni.
redis_sub = require('redis').createClient();
redis_sub.subscribe('channelName', 'moreChannels');
redis_sub.on("message", function (channel, message) {
socket.emit(channel, message);
});
Složité věci!! Ale počkejte, ukázalo se, že tento druh kódu k dosažení cíle ve skutečnosti nepotřebujete. Socket.io má RedisStore, který v podstatě dělá to, co má výše uvedený kód dělat hezčím způsobem, takže můžete psát kód Socket.io tak, jak byste psali pro jeden server, a stále se bude šířit na jiný server socket.io prostřednictvím redis.
Abychom shrnuli, socket.io posílá zprávy přes více serverů pomocí redis jako kanálu namísto paměti.