sql >> Databáze >  >> NoSQL >> Redis

Příklady použití RedisStore v socket.io

ale nechápu, jak by se použití RedisStore v tomto kódu lišilo od používání MemoryStore. Může mi to někdo vysvětlit?

Rozdíl je v tom, že při použití výchozího MemoryStore , jakákoli zpráva, kterou vyšlete v pracovníkovi, bude odeslána pouze klientům připojeným ke stejnému pracovníkovi, protože mezi pracovníky neexistuje žádné IPC. Pomocí RedisStore , bude vaše zpráva zveřejněna na serveru redis, ke kterému jsou přihlášeni všichni vaši pracovníci. Zprávu tedy vyzvednou a vysílají všichni pracovníci a všichni připojení klienti.

Jaký je také rozdíl mezi konfigurací socket.io pro použití redisstore a vytvořením vlastního klienta redis a nastavením/získáním vlastních dat?

RedisStore důvěrně neznám , a tak si nejsem jistý všemi rozdíly. Ale dělat to sám by byla naprosto platná praxe. V takovém případě byste mohli publikovat všechny zprávy na server redis a poslouchat je ve vašem obslužném programu soketu. Asi by to pro vás bylo více práce, ale také byste měli větší kontrolu nad tím, jak to chcete nastavit. Sám jsem udělal něco podobného:

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

To také znamená, že se o pokročilejší směrování zpráv musíte postarat sami, například publikováním/přihlášením k odběru různých kanálů. S RedisStore , tuto funkci získáte zdarma pomocí kanálů socket.io (io.sockets.of("channel").emit(...) ).

Potenciálně velkou nevýhodou je to, že relace socket.io nejsou sdíleny mezi pracovníky. To bude pravděpodobně znamenat problémy, pokud použijete některý z přenosů s dlouhým dotazováním.



  1. Jak ukládat výsledky z dynamicky generovaných formulářů v MongoDb?

  2. Použití Hive k interakci s HBase, část 1

  3. Instalace a spuštění MongoDB na OSX

  4. Existuje nějaký ekvivalent NOW() v MongoDB