Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Przykłady użycia RedisStore w socket.io

ale nie rozumiem, jak używanie RedisStore w tym kodzie różniłoby się od używania MemoryStore. Czy ktoś może mi to wyjaśnić?

Różnica polega na tym, że podczas korzystania z domyślnego MemoryStore , wszelkie komunikaty emitowane w procesie roboczym będą wysyłane tylko do klientów połączonych z tym samym pracownikiem, ponieważ między procesami roboczymi nie ma IPC. Korzystanie z RedisStore , Twoja wiadomość zostanie opublikowana na serwerze redis, który subskrybują wszyscy Twoi pracownicy. W ten sposób wiadomość zostanie odebrana i nadana przez wszystkich pracowników i wszystkich podłączonych klientów.

Jaka jest również różnica między konfiguracją socket.io do korzystania z redisstore a tworzeniem własnego klienta redis i ustawianiem/otrzymywaniem własnych danych?

Nie znam dokładnie RedisStore , więc nie jestem pewien wszystkich różnic. Ale zrobienie tego samemu byłoby całkowicie słuszną praktyką. W takim przypadku możesz opublikować wszystkie komunikaty na serwerze redis i odsłuchać te z obsługi gniazda. Prawdopodobnie byłoby to dla ciebie więcej pracy, ale miałbyś również większą kontrolę nad tym, jak chcesz to skonfigurować. Sam zrobiłem coś podobnego:

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

Oznacza to również, że musisz sam zadbać o bardziej zaawansowane kierowanie wiadomości, na przykład publikując/subskrybując różne kanały. Z RedisStore , otrzymujesz tę funkcjonalność za darmo, używając kanałów socket.io (io.sockets.of("channel").emit(...) ).

Potencjalnie dużą wadą jest to, że sesje socket.io nie są współużytkowane przez pracowników. Prawdopodobnie będzie to oznaczać problemy, jeśli użyjesz któregokolwiek z transportów z długim odpytywaniem.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Django Celery nie może odpytywać postgres db wewnątrz zadania

  2. Redis:Wymagane uwierzytelnianie NOAUTH, ale nie ma ustawienia hasła

  3. Skrypt Redis Lua implementujący CAS (sprawdź i ustaw)?

  4. Jak wdrożyć node.js z redis na Kubernetes?

  5. Pracownik kolejki Redis ulega awarii w utcparse