Voglio inviare i dati a un ID socket specifico.
Eravamo in grado di farlo nelle versioni precedenti:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Come potrei fare qualcosa di simile in Socket.IO 1.0?
Voglio inviare i dati a un ID socket specifico.
Eravamo in grado di farlo nelle versioni precedenti:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Come potrei fare qualcosa di simile in Socket.IO 1.0?
Risposte:
In socket.io 1.0 forniscono un modo migliore per questo. Ogni socket si unisce automaticamente a una stanza predefinita per auto id. Controlla i documenti: http://socket.io/docs/rooms-and-namespaces/#default-room
Quindi puoi emettere su un socket tramite ID con il seguente codice:
io.to(socketid).emit('message', 'for your eyes only');
In socket.io 1.0 puoi farlo con il seguente codice:
if (io.sockets.connected[socketid]) {
io.sockets.connected[socketid].emit('message', 'for your eyes only');
}
Aggiornare:
La risposta di @ MustafaDokumacı contiene una soluzione migliore.
@Mustafa Dokumacı e @Curious hanno già fornito informazioni sufficienti, sto aggiungendo come puoi ottenere l'ID del socket.
Per ottenere l'ID socket utilizzare socket.id :
var chat = io.of("/socket").on('connection',onSocketConnected);
function onSocketConnected(socket){
console.log("connected :"+socket.id);
}
Se hai usato uno spazio dei nomi ho scoperto che quanto segue funziona:
//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');
Ulteriori informazioni sugli spazi dei nomi: http://socket.io/docs/rooms-and-namespaces/
Credo che sia @Curious che @ MustafaDokumacı abbiano fornito soluzioni che funzionano bene. La differenza però è che con la soluzione di @ MustafaDokumacı il messaggio viene trasmesso a una stanza e non solo a un particolare cliente.
La differenza è evidente quando viene richiesto un riconoscimento.
io.sockets.connected[socketid].emit('message', 'for your eyes only', function(data) {...});
funziona come previsto, mentre
io.to(socketid).emit('message', 'for your eyes only', function(data) {...});
fallisce con
Error: Callbacks are not supported when broadcasting
in Node.js -> socket.io -> c'è un esempio di chat da scaricare Paste this in line (io on connection) part .. io uso questo codice che funziona al 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);
});
});