/ / socket.io: najlepší spôsob, ako nájsť všetky sokety jedného používateľa - node.js, socket.io

socket.io: najlepší spôsob, ako nájsť všetky zásuvky jedného používateľa - node.js, socket.io

Snažím sa vytvoriť systém oznámenia push,ale na to potrebujem nájsť správny spôsob, ako vysielať VŠETKY aktívne spojenia soketov používateľa (predpokladáme, že prihlásený používateľ1 otvoril moju webovú stránku na viac ako jednej karte svojho webového prehľadávača)

Keď som bol užívateľ pripojený k svojmu účtu (pomocou relácií), ukladal som všetky aktívne sokety-id do MySQL:

user_id | socket_id
1       | 4lf3dsg2bx1u9d # User 1...
1       | 75ksdfzfff1u3d # ...has two active socket connections
2       | GEdsfoorbar1z4

a niečo podobné v mojom skripte:

io.sockets.sockets[socket_id].emit(...) # for each sockets of User1

Ale som si istý, že MySQL nie je najlepší spôsob, ako usporiadať zásuvky ...

Má niekto lepšie riešenie? Ako io.sockets.has("user=1") alebo niečo kúzla?

Taktiež som testoval riešenie na uskladnenie všetkých soketov podľa užívateľského id v objekte, ale čo výkon?

odpovede:

2 pre odpoveď č. 1

Vaša stratégia ukladania ID soketov nie je strašná, hoci ich ukladáte pomocou niečoho podobného redis by bolo lepšie ako MySQL. Ale pre váš prípad nemusíte vôbec ukladať ID soketov: stačí použiť Socket.io izby miesto. Napríklad zakaždým, keď používateľ č. 1 vytvorí soketové pripojenie, na serveri vykonajte tieto kroky:

socket.join("user_1");

Potom vysielajte všetkým v miestnosti (t. J. Všetky zásuvky, s ktorými je používateľ pripojený) pomocou:

io.sockets.in("user_1").emit("event_name", data);

Môžete skutočne získať ID všetkých soketov v miestnosti, ale jediný čas, ktorý mi skutočne pripadá, je potrebné spočítať počet ID, aby ste zistili, či je užívateľ stále pripojený.

Úplné dokumenty pre izby sú na wiki Socket.io.