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

W jaki sposób socket.io wysyła wiadomości na wiele serwerów?

Socket.io domyślnie używa MemoryStore, więc wszyscy połączeni klienci będą przechowywani w pamięci, co uniemożliwi (no cóż, nie ciche, ale o tym później) wysyłanie i odbieranie zdarzeń od klientów podłączonych do innego serwera socket.io.

Jednym ze sposobów, aby wszystkie serwery socket.io otrzymywały wszystkie zdarzenia, jest to, że wszystkie serwery używają pub-sub redis. Tak więc, zamiast używać socket.emit, można publikować na redis.

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

Wszystkie serwery z gniazdami subskrybują ten kanał przez redis i po otrzymaniu wiadomości wysyłają ją do podłączonych do nich klientów.

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

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

Skomplikowane rzeczy !! Ale poczekaj, okazuje się, że tak naprawdę nie potrzebujesz tego rodzaju kodu, aby osiągnąć cel. Socket.io ma RedisStore, który zasadniczo robi to, co powyższy kod ma robić w lepszy sposób, dzięki czemu można pisać kod Socket.io tak, jak pisałbyś dla pojedynczego serwera i nadal będzie propagowany na inny serwer Socket.io redys.

Podsumowując, socket.io wysyła wiadomości na wiele serwerów, używając redis jako kanału zamiast pamięci.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie można załadować pliku lub zestawu System.Runtime.CompilerServices.Unsafe

  2. Dostęp do zmiennej poza funkcją redis pipelining na Laravel

  3. Błąd 99 podczas łączenia z hostem lokalnym:6379. Nie można przypisać żądanego adresu

  4. Redis + ActionController::Żywe wątki nie umierają

  5. Dlaczego redis-server blokuje skrypt lua?