sql >> Database teknologi >  >> NoSQL >> Redis

Hvordan sender socket.io beskeder på tværs af flere servere?

Socket.io bruger MemoryStore som standard, så alle de tilsluttede klienter vil blive gemt i hukommelsen, hvilket gør det umuligt (vel, ikke stille, men mere om det senere) at sende og modtage begivenheder fra klienter, der er tilsluttet en anden socket.io-server.

En måde at få alle socket.io-servere til at modtage alle hændelser er, at alle servere bruger redis' pub-sub. Så i stedet for at bruge socket.emit kan man publicere til redis.

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

Og alle socket-servere abonnerer på den kanal gennem redis og udsender den til klienter, der er tilsluttet dem, når de modtager en besked.

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

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

Komplicerede ting!! Men vent, det viser sig, at du faktisk ikke har brug for denne slags kode for at nå målet. Socket.io har RedisStore, som i det væsentlige gør, hvad koden ovenfor skal gøre på en bedre måde, så du kan skrive Socket.io-kode, som du ville skrive for en enkelt server og stadig vil blive spredt over til andre socket.io-servere gennem redis.

For at opsummere sender socket.io beskeder på tværs af flere servere ved at bruge redis som kanal i stedet for hukommelse.



  1. Meteor, One to Many Relationship &kun tilføje felt til klientsidens samling i Publish?

  2. Flaske:videresende baggrundsarbejderjob (rq, redis)

  3. Hvordan bruger StackExchange.Redis flere endepunkter og forbindelser?

  4. Laravel Redis konfiguration