Redis
 sql >> Datenbank >  >> NoSQL >> Redis

Wie sendet socket.io Nachrichten über mehrere Server?

Socket.io verwendet standardmäßig MemoryStore, sodass alle verbundenen Clients im Speicher gespeichert werden, was es unmöglich macht (naja, nicht leise, aber dazu später mehr), Ereignisse von Clients zu senden und zu empfangen, die mit einem anderen socket.io-Server verbunden sind.

Eine Möglichkeit, alle socket.io-Server dazu zu bringen, alle Ereignisse zu empfangen, besteht darin, dass alle Server das Pub-Sub von Redis verwenden. Anstatt also socket.emit zu verwenden, kann man in redis veröffentlichen.

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

Und alle Socket-Server abonnieren diesen Kanal über Redis und geben sie beim Empfang einer Nachricht an die mit ihnen verbundenen Clients aus.

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

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

Kompliziertes Zeug !! Aber warten Sie, es stellt sich heraus, dass Sie diese Art von Code nicht wirklich brauchen, um das Ziel zu erreichen. Socket.io verfügt über RedisStore, das im Wesentlichen das tut, was der obige Code auf eine nettere Weise tun soll, sodass Sie Socket.io-Code so schreiben können, wie Sie es für einen einzelnen Server schreiben würden, und dennoch über andere socket.io-Server weitergegeben werden redis.

Zusammenfassend lässt sich sagen, dass socket.io Nachrichten über mehrere Server sendet, indem Redis als Kanal anstelle von Speicher verwendet wird.