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

jak získat přístup k relaci soketu ve všech clusterech

Socket.io-redis v jistém smyslu sleduje...

Z jejich dokumentů

"Adaptér Redis rozšiřuje funkci vysílání adaptéru v paměti:paket je také publikován do kanálu Redis (formát názvu kanálu viz níže).

Každý server Socket.IO přijme tento paket a vysílá jej do vlastního seznamu připojených soketů."

Takže v zásadě se redis používá jako zprostředkovatel, který říká každému soketovému serveru, aby emitoval na základě X kanálu atd. Umožňuje vám mít server socket.io v režimu clusteru, ale jak jste zmínil, může selhat, když potřebujete zachovat sledovat věci mimo jen emit.

Takže kde nás to opouští... Můžete použít vlastní háčky přes socket.io-redis, ale osobně jsem zjistil, že je to opravdu obtížné pochopit a používat a osobně jsem měl omezený úspěch. Myslím, že s novou verzí socket.io a socket.io redis došlo k několika vylepšením, které to zjednodušují, ale nezkoušel jsem je.

Místo toho používáme redis hset a jget k uložení soketu a ID uživatelů, a když pak chceme dostat všechny uživatele online, můžeme dotazem redis získat seznam online uživatelů nebo uživatelů v konkrétní místnosti atd.

Co budete chtít udělat, je přidat balíček redis a připojit se navíc k běžnému pub/sub.

Poté, když se uživatel připojí k místnosti nebo k vašemu serveru, uděláte hset. Při prvním připojení to naše vypadá nějak takto

redis.hset([collection-name],[Field],[value])

Takže v kódu to vypadá jako

redis.hset(decoded.cID,"socket-" + socket.id,socket.nickname)

Tím se nastaví hodnota v redis, takže název kolekce je hodnota (pro nás je to jedinečné id kanálu), poté naskladníme 'socket.id' pro pole spolu s 'přezdívku' pro hodnotu. Tato hodnota je ID uživatele NEBO jeho anonymní, pokud nejsou přihlášeni

Když pak chceme zachytit, kdo je v místnosti, použijeme příkaz hget

redis.HGETALL([collection-name],function(err,results){}

Takže uvnitř řekněme emit zavoláme příkaz redis.HGETALL, abychom dostali všechny položky do konkrétní kolekce, kterou předáme a pošleme zpět všem připojeným uživatelům.




  1. Trvalá data z Redis do MongoDB pro úložiště dat

  2. Agregace MongoDB s ovladačem Java

  3. MongoDB:Načítat pouze dokumenty vytvořené za posledních 24 hodin?

  4. Existuje nějaká možnost, jak omezit využití paměti mongodb?