Socket.io използва MemoryStore по подразбиране, така че всички свързани клиенти ще се съхраняват в паметта, което прави невъзможно (е, не тихо, но повече за това по-късно) за изпращане и получаване на събития от клиенти, свързани към различен сървър на socket.io.
Един от начините да накарате всички сървъри socket.io да получават всички събития е, че всички сървъри използват pub-sub на redis. Така че, вместо да използвате socket.emit, можете да публикувате в redis.
redis_client = require('redis').createClient();
redis_client.publish('channelName', data);
И всички сокет сървъри се абонират за този канал чрез redis и при получаване на съобщение го излъчват на клиенти, свързани с тях.
redis_sub = require('redis').createClient();
redis_sub.subscribe('channelName', 'moreChannels');
redis_sub.on("message", function (channel, message) {
socket.emit(channel, message);
});
Сложни неща!! Но изчакайте, оказва се, че всъщност нямате нужда от този вид код, за да постигнете целта. Socket.io има RedisStore, който по същество прави това, което кодът по-горе трябва да прави по по-приятен начин, така че можете да пишете код на Socket.io, както бихте писали за един сървър и все пак ще се разпространява към друг сървър на socket.io чрез redis.
За да обобщим, socket.io изпраща съобщения на множество сървъри, като използва redis като канал вместо памет.