sql >> Database >  >> NoSQL >> Redis

Hoe verzendt socket.io berichten over meerdere servers?

Socket.io gebruikt standaard MemoryStore, dus alle aangesloten clients worden in het geheugen opgeslagen, waardoor het onmogelijk is (nou ja, niet stil, maar daarover later meer) om gebeurtenissen te verzenden en ontvangen van clients die zijn aangesloten op een andere socket.io-server.

Een manier om ervoor te zorgen dat alle socket.io-servers alle gebeurtenissen ontvangen, is dat alle servers de pub-sub van redis gebruiken. Dus in plaats daarvan kan je socket.emit gebruiken om te publiceren naar redis.

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

En alle socketservers abonneren zich op dat kanaal via redis en zenden het na ontvangst van een bericht uit naar clients die op hen zijn aangesloten.

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

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

Ingewikkelde dingen !! Maar wacht, het blijkt dat je dit soort code niet echt nodig hebt om het doel te bereiken. Socket.io heeft RedisStore, wat in wezen doet wat de bovenstaande code op een leukere manier zou moeten doen, zodat je Socket.io-code kunt schrijven zoals je zou schrijven voor een enkele server en toch via een andere socket.io-server wordt gepropageerd opnieuw.

Om samen te vatten, stuurt socket.io berichten over meerdere servers door redis als kanaal te gebruiken in plaats van geheugen.



  1. MongoDB $uur

  2. MongoDB $max Aggregation Pipeline Operator

  3. Mongo-cxx-driver bouwen met CMake ExternalProject_Add

  4. MongoDB - admin-gebruiker niet geautoriseerd