sql >> Base de Datos >  >> NoSQL >> Redis

¿Cómo envía socket.io mensajes a través de múltiples servidores?

Socket.io usa MemoryStore de forma predeterminada, por lo que todos los clientes conectados se almacenarán en la memoria, lo que hace imposible (bueno, no es tranquilo, pero hablaremos de eso más adelante) enviar y recibir eventos de clientes conectados a un servidor socket.io diferente.

Una forma de hacer que todos los servidores socket.io reciban todos los eventos es que todos los servidores usen pub-sub de redis. Entonces, en lugar de usar socket.emit, se puede publicar en redis.

redis_client = require('redis').createClient();
redis_client.publish('channelName', data);

Y todos los servidores de socket se suscriben a ese canal a través de redis y al recibir un mensaje lo emiten a los clientes conectados a ellos.

redis_sub = require('redis').createClient();
redis_sub.subscribe('channelName', 'moreChannels');

redis_sub.on("message", function (channel, message) {        
    socket.emit(channel, message);
});

Cosas Complicadas!! Pero espera, resulta que en realidad no necesitas este tipo de código para lograr el objetivo. Socket.io tiene RedisStore, que esencialmente hace lo que se supone que debe hacer el código anterior de una manera más agradable para que pueda escribir el código Socket.io como lo haría para un solo servidor y aún se propagará a otro servidor socket.io a través de redis.

Para resumir, socket.io envía mensajes a través de varios servidores utilizando redis como canal en lugar de memoria.