Socket.io använder MemoryStore som standard, så alla anslutna klienter kommer att lagras i minnet vilket gör det omöjligt (nåja, inte tyst men mer om det senare) att skicka och ta emot händelser från klienter som är anslutna till en annan socket.io-server.
Ett sätt att få alla socket.io-servrar att ta emot alla händelser är att alla servrar använder redis pub-sub. Så istället för att använda socket.emit kan man publicera till redis.
redis_client = require('redis').createClient();
redis_client.publish('channelName', data);
Och alla socketservrar prenumererar på den kanalen genom redis och skickar det till klienter som är anslutna till dem när de får ett meddelande.
redis_sub = require('redis').createClient();
redis_sub.subscribe('channelName', 'moreChannels');
redis_sub.on("message", function (channel, message) {
socket.emit(channel, message);
});
komplicerade grejer!! Men vänta, det visar sig att du faktiskt inte behöver den här typen av kod för att uppnå målet. Socket.io har RedisStore som i huvudsak gör vad koden ovan ska göra på ett trevligare sätt så att du kan skriva Socket.io-kod som du skulle skriva för en enda server och fortfarande kommer att spridas till andra socket.io-servrar genom redis.
För att sammanfatta skickar socket.io meddelanden över flera servrar genom att använda redis som kanal istället för minne.