Pytanie na podstawie tej odpowiedzi: https://stackoverflow.com/a/18650183/4478897socket.io + Redis + expressjs klaster - pobranie obiektu gniazda w expressjs zażądać
Starałem się znaleźć takie rozwiązanie, ale nic nie wydaje się działać w taki sposób, że muszę.
Klastry expressjs
i socket.io
możemy dzielić sesje za pomocą Redis i wysłać io
wiadomości wewnątrz io
świata (io.sockets.on('connection',
...). Problem polega na tym, że chcemy wysłać wiadomość (lub użyć zwykłego socket.join/leave
) wewnątrz świata (route.get/post
).
Jeśli nie używamy klastrów możemy atach obiektu klient socket
do wyraźnej request
obiektu (lub po prostu export
przedmiotem io
), a następnie używać go w dowolnym momencie na dowolnej trasie GET/POST.
Z drugiej strony, jeśli mamy do grupowania i wykorzystywać wspomnianą metodę, aby uzyskać obiekt wewnątrz świata expressjs
socket
, czasami przedmiotem socket
jest nieokreślona, ponieważ socket
obiektu dla tego klienta jest inicjowany w drugiej worker
.
Niektóre przykład przepływ:
- klient łączy się http://localhost i
worker 1
obsługuje tę prośbę. Po pobraniu strony klient łączy się z .Worker 2
obsługuje to połączenie. - Klient wykonuje test POST i ponownie obsługuje go:
worker 1
lub .
W tym przypadku, gdy klient wykonuje POST, tylko worker 2
zna obiekt socket
dla tego klienta. W ten sposób otrzymamy niezdefiniowany obiekt socket
.
Więc pytanie:
Jak możemy dostać klient socket
obiektu z dowolnego worker
aby używać go na expressjs request
obiektu.
Być może mój kod jest błędny, ale jest prawie jak link do odpowiedzi wspomnianej powyżej.
zauważa
- Nie chcę użyć jakiegoś pełnomocnika.
- Nie chcą migrować do innych bibliotek (expressio, sockjs ...)
- Przepraszam za mój angielski :)
Korzystanie ostatnich nodejs, socket.io, expressjs, socket.io- redis, redis ... wersje
Nie wahaj się o coś zapytać!
UPDATE 1
Możliwe rozwiązanie, ale nadal trzeba go przetestować. Nie wiem, czy to naprawdę dobre rozwiązanie.
- UPDATE 3: Kod Praca na własnym odpowiedź
UPDATE 2
Jak Update 1, ale przy użyciu https://nodejs.org/dist/latest-v5.x/docs/api/cluster.html#cluster_event_message
Widziałem scalenie. Dziękujemy i tak: D – nada