sql >> Database >  >> NoSQL >> Redis

Voorbeelden bij het gebruik van RedisStore in socket.io

maar ik begrijp niet hoe het gebruik van RedisStore in die code anders zou zijn dan het gebruik van MemoryStore. Kan iemand het me uitleggen?

Het verschil is dat bij gebruik van de standaard MemoryStore , wordt elk bericht dat u in een werknemer verzendt alleen verzonden naar clients die zijn verbonden met dezelfde werknemer, aangezien er geen IPC is tussen de werknemers. De RedisStore gebruiken , zal uw bericht worden gepubliceerd op een redis-server, waarop al uw werknemers zijn geabonneerd. Het bericht wordt dus opgepikt en uitgezonden door alle werknemers en alle aangesloten klanten.

Wat is ook het verschil tussen het configureren van socket.io om redisstore te gebruiken versus het maken van uw eigen redis-client en het instellen/krijgen van uw eigen gegevens?

Ik ben niet goed bekend met RedisStore , en dus ben ik niet zeker van alle verschillen. Maar het zelf doen zou een volkomen geldige praktijk zijn. In dat geval zou je alle berichten op een redis-server kunnen publiceren en naar die in je socket-handler kunnen luisteren. Het zou waarschijnlijk meer werk voor je zijn, maar je zou ook meer controle hebben over hoe je het wilt instellen. Ik heb zelf iets soortgelijks gedaan:

// Publishing a message somewhere
var pub = redis.createClient();
pub.publish("messages", JSON.stringify({type: "foo", content: "bar"}));

// Socket handler
io.sockets.on("connection", function(socket) {
  var sub = redis.createClient();
  sub.subscribe("messages");
  sub.on("message", function(channel, message) {
    socket.send(message);
  });

  socket.on("disconnect", function() {
    sub.unsubscribe("messages");
    sub.quit();
  });
});

Dit betekent ook dat je zelf voor meer geavanceerde berichtroutering moet zorgen, bijvoorbeeld door te publiceren/abonneren op verschillende kanalen. Met RedisStore , krijg je die functionaliteit gratis door socket.io-kanalen te gebruiken (io.sockets.of("channel").emit(...) ).

Een potentieel groot nadeel hiervan is dat socket.io-sessies niet worden gedeeld tussen werknemers. Dit zal waarschijnlijk problemen opleveren als je een van de lange polling transporten gebruikt.



  1. Databasegebruikersbeheer met ClusterControl

  2. MongoDB aggregaat vullen ontbrekende dagen

  3. ClusterControl op AWS implementeren om uw clouddatabase te beheren

  4. Toegang tot variabele buiten redis pipelining-functie op Laravel