Chcę wysłać dane do jednego określonego identyfikatora gniazda.
Kiedyś mogliśmy to robić w starszych wersjach:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Jak bym zrobił coś podobnego w Socket.IO 1.0?
Chcę wysłać dane do jednego określonego identyfikatora gniazda.
Kiedyś mogliśmy to robić w starszych wersjach:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Jak bym zrobił coś podobnego w Socket.IO 1.0?
Odpowiedzi:
W socket.io 1.0 zapewniają lepszy sposób na to. Każde gniazdo automatycznie dołącza do pokoju domyślnego według własnego identyfikatora. Sprawdź dokumenty: http://socket.io/docs/rooms-and-namespaces/#default-room
Możesz więc emitować do gniazda przez id z następującym kodem:
io.to(socketid).emit('message', 'for your eyes only');
W socket.io 1.0 możesz to zrobić za pomocą następującego kodu:
if (io.sockets.connected[socketid]) {
io.sockets.connected[socketid].emit('message', 'for your eyes only');
}
Aktualizacja:
Odpowiedź @ MustafaDokumacı zawiera lepsze rozwiązanie.
@Mustafa Dokumacı i @Curious dostarczyli już wystarczających informacji, dodaję, w jaki sposób można uzyskać identyfikator gniazda.
Aby uzyskać identyfikator gniazda, użyj socket.id :
var chat = io.of("/socket").on('connection',onSocketConnected);
function onSocketConnected(socket){
console.log("connected :"+socket.id);
}
Jeśli korzystałeś z przestrzeni nazw, zauważyłem, że działa:
//Defining the namespace <br>
var nsp = io.of('/my-namespace');
//targeting the message to socket id <br>
nsp.to(socket id of the intended recipient).emit('private message', 'hello');
Więcej o przestrzeniach nazw: http://socket.io/docs/rooms-and-namespaces/
Uważam, że zarówno @Curious, jak i @ MustafaDokumacı zapewniły rozwiązania, które działają dobrze. Różnica polega jednak na tym, że dzięki rozwiązaniu @ MustafaDokumacı wiadomość jest transmitowana do pokoju, a nie tylko do konkretnego klienta.
Różnica jest wyraźna, gdy wymagane jest potwierdzenie.
io.sockets.connected[socketid].emit('message', 'for your eyes only', function(data) {...});
działa zgodnie z oczekiwaniami, podczas gdy
io.to(socketid).emit('message', 'for your eyes only', function(data) {...});
zawodzi z
Error: Callbacks are not supported when broadcasting
w Node.js -> socket.io -> jest przykład czatu do pobrania Wklej to w linii (io przy połączeniu) część .. używam tego kodu, który działa w 100%
io.on('connection', function(socket){
socket.on('chat message', function(msg){
console.log(socket.id);
io.to(socket.id).emit('chat message', msg+' you ID is:'+socket.id);
});
});