O Socket.io usa MemoryStore por padrão, portanto, todos os clientes conectados serão armazenados na memória, tornando impossível (bem, não tranquilo, mas mais sobre isso depois) enviar e receber eventos de clientes conectados a um servidor socket.io diferente.
Uma maneira de fazer com que todos os servidores socket.io recebam todos os eventos é que todos os servidores usem o pub-sub do redis. Então, em vez de usar socket.emit, pode-se publicar no redis.
redis_client = require('redis').createClient();
redis_client.publish('channelName', data);
E todos os servidores socket se inscrevem nesse canal através do redis e ao receber uma mensagem emitem para os clientes conectados a eles.
redis_sub = require('redis').createClient();
redis_sub.subscribe('channelName', 'moreChannels');
redis_sub.on("message", function (channel, message) {
socket.emit(channel, message);
});
Coisas complicadas!! Mas espere, acontece que você realmente não precisa desse tipo de código para atingir o objetivo. O Socket.io tem o RedisStore, que essencialmente faz o que o código acima deveria fazer de uma maneira melhor, para que você possa escrever o código Socket.io como escreveria para um único servidor e ainda será propagado para outro servidor socket.io através redis.
Para resumir, o socket.io envia mensagens em vários servidores usando redis como canal em vez de memória.