Zaczynam od socket.io + node.js, wiem, jak wysłać wiadomość lokalnie i nadać socket.broadcast.emit()
funkcję: - wszyscy podłączeni klienci otrzymują tę samą wiadomość.
Teraz chciałbym wiedzieć, jak wysłać prywatną wiadomość do konkretnego klienta, mam na myśli jedno gniazdo do prywatnej rozmowy między 2 osobami (strumień klient-klient). Dzięki.
Odpowiedzi:
Kiedy użytkownik łączy się, powinien wysłać do serwera wiadomość z nazwą użytkownika, która musi być unikalna, np. E-mail.
Para nazwa użytkownika i gniazdo powinny być przechowywane w obiekcie takim jak ten:
Na kliencie wyemituj obiekt do serwera z następującymi danymi:
Nasłuchuj wiadomości na serwerze. Po odebraniu wiadomości wyemituj dane do odbiorcy.
Na kliencie nasłuchuj emisji z serwera o nazwie „ReceivedMessage”, a odczytując dane, możesz obsłużyć, od kogo pochodzą i jaka wiadomość została wysłana.
źródło
Możesz korzystać z pokoi socket.io. Ze strony klienta wyemituj zdarzenie (w tym przypadku "dołączenie" może być dowolne) z dowolnym unikalnym identyfikatorem (email, id).
Strona klienta:
Teraz po stronie serwera użyj tych informacji, aby utworzyć unikalne pomieszczenie dla tego użytkownika
Po stronie serwera:
Tak więc teraz każdy użytkownik dołączył do pokoju nazwanego na podstawie adresu e-mail użytkownika. Więc jeśli chcesz wysłać konkretnemu użytkownikowi wiadomość, po prostu musisz
Po stronie serwera:
Ostatnią rzeczą do zrobienia po stronie klienta jest odsłuchanie zdarzenia „new_msg”.
Strona klienta:
Mam nadzieję, że wpadłeś na pomysł.
źródło
socket.io-redis
.{email: [email protected]}
różne dla wszystkich połączeń, czy wszyscy klienci, którzy przechodzą do aplikacji, nie mają użytkownika,[email protected]
jak ustawić go jako użytkownika[email protected]
dla drugiego klienta, który się łączy, abym mógł mieć różne pokoje. przepraszam, jeśli to irytujące pytanie.PEWNOŚĆ: Po prostu,
Oto, czego potrzebujesz:
Za każdym razem, gdy użytkownik dołączył do serwera, zostaną wygenerowane szczegóły gniazda, w tym identyfikator. To identyfikator naprawdę pomaga wysłać wiadomość do określonych osób.
najpierw musimy przechowywać wszystkie socket.ids w tablicy,
tutaj nazwa to nazwa odbiorcy. Przykład:
Więc teraz możemy pobrać ten socket.id z nazwą odbiorcy za każdym razem, gdy wysyłamy wiadomość:
w tym celu musimy znać nazwę odbiorcy. Musisz wyemitować nazwę odbiorcy do serwera.
ostatnia rzecz to:
Mam nadzieję, że to działa dobrze dla Ciebie.
Powodzenia!!
źródło
Możesz odnieść się do pokoi socket.io . Kiedy podałeś gniazdo - możesz dołączyć go do nazwanego pokoju, na przykład „user. # {Userid}”.
Następnie możesz wysłać prywatną wiadomość do dowolnego klienta pod dogodną nazwą, na przykład:
W powyższej operacji wysyłamy „new_message” do użytkownika „125”.
dzięki.
źródło
W projekcie naszej firmy stosujemy podejście „pokoje”, a jego nazwa jest połączeniem identyfikatorów wszystkich użytkowników w rozmowie jako unikalnego identyfikatora (nasza implementacja bardziej przypomina komunikator facebookowy), przykład:
| id | nazwa | 1 | Scott | 2 | Susan
Nazwa „pokoju” będzie brzmiała „1-2” (identyfikatory są uporządkowane rosnąco) i po odłączeniu socket.io automatycznie czyści pomieszczenie
w ten sposób wysyłasz wiadomości tylko do tego pokoju i tylko do użytkowników online (połączonych) (mniej pakietów wysyłanych przez serwer).
źródło
Pozwól, że uproszczę to dzięki pokojom socket.io. zażądaj serwera z unikalnym identyfikatorem, aby dołączyć do serwera. tutaj używamy adresu e-mail jako unikalnego identyfikatora.
Klient Socket.io
Gdy użytkownik dołączył do serwera, utwórz pokój dla tego użytkownika
Serwer Socket.io
Teraz wszyscy jesteśmy gotowi do przyłączenia się. niech wyemituje coś z serwerowni
to
, aby użytkownik mógł słuchać.Serwer Socket.io
Sfinalizujmy temat wysłuchaniem
message
zdarzenia po stronie klientaOdniesienie z pokoi Socket.io
źródło