Plik Readme Socket.io zawiera następujący przykład:
var io = require('socket.io').listen(80);
io.sockets.on('connection', function (socket) {
socket.join('justin bieber fans');
socket.broadcast.to('justin bieber fans').emit('new fan');
io.sockets.in('rammstein fans').emit('new non-fan');
});
Jaka jest różnica między socket.broadcast.to()
i io.sockets.in()
?
Odpowiedzi:
socket.broadcast.to
nadaje do wszystkich gniazd w danym pomieszczeniu, z wyjątkiem gniazda, z którego została wywołana, podczasio.sockets.in
transmisji do wszystkich gniazd w danym pomieszczeniu.źródło
Node.js był czymś, co naprawdę mnie interesowało i użyłem go w jednym z moich projektów do stworzenia gry wieloosobowej.
io.sockets.in().emit()
isocket.broadcast.to().emit()
są to dwie główne metody emitowania, których używamy w pokojach Socket.io ( https://github.com/LearnBoost/socket.io/wiki/Rooms ) Pokoje umożliwiają proste partycjonowanie podłączonych klientów. Pozwala to na emitowanie zdarzeń do podzbiorów listy podłączonych klientów i zapewnia prostą metodę zarządzania nimi.Pozwalają nam zarządzać podzbiorami listy podłączonych klientów (które nazywamy pokojami) i mają podobne funkcje, jak główne funkcje socket.io
io.sockets.emit()
isocket.broadcast.emit()
.Zresztą postaram się podać przykładowe kody z komentarzami do wyjaśnienia. Zobacz, czy to pomaga;
Pokoje Socket.io
i) io.sockets.in (). emit ();
ii) socket.broadcast.to (). emit ();
Socket.io
i) io.sockets.emit ();
ii) socket.broadcast.emit ();
Twoje zdrowie
źródło
Aktualizacja 2019 : socket.io to specjalny moduł, który korzysta z gniazd sieciowych, a następnie powraca do odpytywania żądań http. Tylko dla websockets: dla klienta użyj natywnych websockets, a dla node.js użyj ws lub tej biblioteki.
Prosty przykład
Składnia w socketio jest myląca. Ponadto każde gniazdo jest automatycznie połączone z własnym pokojem za pomocą identyfikatora
socket.id
(tak działa prywatny czat w socketio, używają pokoi).Wyślij do nadawcy i nikogo innego
Wyślij do wszystkich, łącznie z nadawcą (jeśli nadawca jest w pokoju) w pokoju „mój pokój”
Wyślij do wszystkich oprócz nadawcy (jeśli nadawca jest w pokoju) w pokoju „mój pokój”
Wyślij do wszystkich w każdym pokoju , w tym do nadawcy
Wyślij tylko do określonego gniazda (czat prywatny)
źródło
otherSocket.on('connect',()=> { console.log(otherSocket.id); });
źródło
W Socket.IO 1.0, .to () i .in () są takie same. A inni w pokoju otrzymają wiadomość. Klient wysyła, nie otrzyma wiadomości.
Sprawdź kod źródłowy (v1.0.6):
https://github.com/Automattic/socket.io/blob/a40068b5f328fe50a2cd1e54c681be792d89a595/lib/socket.js#L173
źródło
.to()
i,in
są takie same, co by się stało, gdy utworzę pokój o tej samej nazwie, co identyfikator gniazda. Co bysocket.broadcast.to(socketid)
wtedy zrobił na przykład?