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

Esempi nell'utilizzo di RedisStore in socket.io

ma non capisco come l'utilizzo di RedisStore in quel codice sarebbe diverso dall'utilizzo di MemoryStore. Qualcuno può spiegarmelo?

La differenza è che quando si utilizza il MemoryStore predefinito , qualsiasi messaggio che emetti in un lavoratore verrà inviato solo ai client collegati allo stesso lavoratore, poiché non c'è IPC tra i lavoratori. Utilizzando il RedisStore , il tuo messaggio verrà pubblicato su un server redis, a cui tutti i tuoi dipendenti sono iscritti. Pertanto, il messaggio verrà raccolto e trasmesso da tutti i lavoratori e tutti i client collegati.

Inoltre, qual è la differenza tra la configurazione di socket.io per l'utilizzo di redisstore e la creazione del proprio client redis e l'impostazione/ottenimento dei propri dati?

Non conosco molto bene RedisStore , e quindi non sono sicuro di tutte le differenze. Ma farlo da soli sarebbe una pratica perfettamente valida. In tal caso, puoi pubblicare tutti i messaggi su un server redis e ascoltare quelli nel tuo gestore socket. Probabilmente sarebbe più lavoro per te, ma avresti anche più controllo su come vuoi configurarlo. Io stesso ho fatto qualcosa di simile:

// 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();
  });
});

Ciò significa anche che devi occuparti di un instradamento dei messaggi più avanzato, ad esempio pubblicando/abbonandoti a canali diversi. Con RedisStore , ottieni quella funzionalità gratuitamente usando i canali socket.io (io.sockets.of("channel").emit(...) ).

Un potenziale grosso svantaggio è che le sessioni di socket.io non sono condivise tra i lavoratori. Questo probabilmente significherà problemi se utilizzi uno dei trasporti con polling lungo.