Ich möchte Daten an eine bestimmte Socket-ID senden.
Früher konnten wir dies in älteren Versionen tun:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Wie würde ich in Socket.IO 1.0 etwas Ähnliches tun?
Ich möchte Daten an eine bestimmte Socket-ID senden.
Früher konnten wir dies in älteren Versionen tun:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Wie würde ich in Socket.IO 1.0 etwas Ähnliches tun?
Antworten:
In socket.io 1.0 bieten sie dafür einen besseren Weg. Jeder Socket wird automatisch über seine eigene ID einem Standardraum zugeordnet. Überprüfen Sie die Dokumente: http://socket.io/docs/rooms-and-namespaces/#default-room
Sie können also per ID mit folgendem Code an einen Socket senden:
io.to(socketid).emit('message', 'for your eyes only');
In socket.io 1.0 können Sie dies mit folgendem Code tun:
if (io.sockets.connected[socketid]) {
io.sockets.connected[socketid].emit('message', 'for your eyes only');
}
Aktualisieren:
@ MustafaDokumacıs Antwort enthält eine bessere Lösung.
@Mustafa Dokumacı und @Curious haben bereits genügend Informationen bereitgestellt. Ich füge hinzu, wie Sie die Socket-ID erhalten können.
Um die Socket-ID zu erhalten, verwenden Sie socket.id :
var chat = io.of("/socket").on('connection',onSocketConnected);
function onSocketConnected(socket){
console.log("connected :"+socket.id);
}
Wenn Sie einen Namespace verwendet haben, stellte ich fest, dass Folgendes funktioniert:
//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');
Weitere Informationen zu Namespaces: http://socket.io/docs/rooms-and-namespaces/
Ich glaube, dass sowohl @Curious als auch @ MustafaDokumacı Lösungen geliefert haben, die gut funktionieren. Der Unterschied besteht jedoch darin, dass mit der Lösung von @ MustafaDokumacı die Nachricht an einen Raum und nicht nur an einen bestimmten Kunden gesendet wird.
Der Unterschied ist deutlich, wenn eine Bestätigung angefordert wird.
io.sockets.connected[socketid].emit('message', 'for your eyes only', function(data) {...});
funktioniert wie erwartet, während
io.to(socketid).emit('message', 'for your eyes only', function(data) {...});
scheitert mit
Error: Callbacks are not supported when broadcasting
in Node.js -> socket.io -> gibt es ein Chat-Beispiel zum Herunterladen Einfügen in Zeile (io bei Verbindung) Teil .. Ich verwende diesen Code, der 100% funktioniert
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);
});
});