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

Jak socket.io posílá zprávy přes více serverů?

Socket.io standardně používá MemoryStore, takže všichni připojení klienti budou uloženi v paměti, což znemožňuje (no, ne tiché, ale o tom později) odesílat a přijímat události od klientů připojených k jinému serveru socket.io.

Jedním ze způsobů, jak zajistit, aby všechny servery socket.io přijímaly všechny události, je, že všechny servery používají redis's pub-sub. Takže místo toho pomocí socket.emit lze publikovat do redis.

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

A všechny soketové servery se přihlásí k odběru tohoto kanálu prostřednictvím redis a po obdržení zprávy ji odešlou klientům, kteří jsou k nim připojeni.

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

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

Složité věci!! Ale počkejte, ukázalo se, že tento druh kódu k dosažení cíle ve skutečnosti nepotřebujete. Socket.io má RedisStore, který v podstatě dělá to, co má výše uvedený kód dělat hezčím způsobem, takže můžete psát kód Socket.io tak, jak byste psali pro jeden server, a stále se bude šířit na jiný server socket.io prostřednictvím redis.

Abychom shrnuli, socket.io posílá zprávy přes více serverů pomocí redis jako kanálu namísto paměti.



  1. SQL COALESCE() Vysvětleno

  2. MongoDB updateMany()

  3. Více výrazů $elemMatch pro shodu hodnot pole pomocí $all v MongoDB?

  4. Přesměrujte výstup mongo dotazu do souboru csv