Socket.io utilise MemoryStore par défaut, donc tous les clients connectés seront stockés en mémoire, ce qui rendra impossible (enfin, pas tranquille mais plus à ce sujet plus tard) d'envoyer et de recevoir des événements de clients connectés à un autre serveur socket.io.
Une façon de faire en sorte que tous les serveurs socket.io reçoivent tous les événements est que tous les serveurs utilisent le pub-sub de redis. Ainsi, au lieu d'utiliser socket.emit, on peut publier sur redis.
redis_client = require('redis').createClient();
redis_client.publish('channelName', data);
Et tous les serveurs de socket s'abonnent à ce canal via redis et lorsqu'ils reçoivent un message, ils l'émettent aux clients qui leur sont connectés.
redis_sub = require('redis').createClient();
redis_sub.subscribe('channelName', 'moreChannels');
redis_sub.on("message", function (channel, message) {
socket.emit(channel, message);
});
Des trucs compliqués !! Mais attendez, il s'avère que vous n'avez pas réellement besoin de ce type de code pour atteindre l'objectif. Socket.io a RedisStore qui fait essentiellement ce que le code ci-dessus est censé faire d'une manière plus agréable afin que vous puissiez écrire du code Socket.io comme vous le feriez pour un seul serveur et sera toujours propagé à un autre serveur socket.io via redis.
Pour résumer, socket.io envoie des messages sur plusieurs serveurs en utilisant redis comme canal au lieu de la mémoire.