Je souhaite envoyer des données à un ID de socket spécifique.
Nous avions l'habitude de faire cela dans les anciennes versions:
io.sockets.socket(socketid).emit('message', 'for your eyes only');
Comment pourrais-je faire quelque chose de similaire dans Socket.IO 1.0?
Dans socket.io 1.0, ils fournissent un meilleur moyen pour cela. Chaque socket rejoint automatiquement une pièce par défaut par son propre identifiant. Vérifier les documents: http://socket.io/docs/rooms-and-namespaces/#default-room
Vous pouvez donc émettre vers un socket par identifiant avec le code suivant:
io.to(socketid).emit('message', 'for your eyes only');
Dans socket.io 1.0, vous pouvez le faire avec le code suivant:
if (io.sockets.connected[socketid]) {
io.sockets.connected[socketid].emit('message', 'for your eyes only');
}
Mise à jour:
@ La réponse de Mustafa Dokumacı contient une meilleure solution.
@Mustafa Dokumacı et @Curious ont déjà fourni suffisamment d'informations, j'ajoute comment vous pouvez obtenir un identifiant de socket.
Pour obtenir l’identifiant de la socket, utilisez socket.id:
var chat = io.of("/socket").on('connection',onSocketConnected);
function onSocketConnected(socket){
console.log("connected :"+socket.id);
}
Si vous avez utilisé un espace de noms, j'ai constaté que les opérations suivantes fonctionnent:
//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');
En savoir plus sur les espaces de noms: http://socket.io/docs/rooms-and-namespaces/
Je crois que @Curious et @ MustafaDokumacı ont fourni des solutions qui fonctionnent bien. La différence cependant est que, avec la solution de @ MustafaDokumacı, le message est diffusé dans une pièce et non pas uniquement vers un client particulier.
La différence est évidente lorsqu'un accusé de réception est demandé.
io.sockets.connected[socketid].emit('message', 'for your eyes only', function(data) {...});
fonctionne comme prévu, tandis que
io.to(socketid).emit('message', 'for your eyes only', function(data) {...});
échoue avec
Error: Callbacks are not supported when broadcasting
dans Node.js -> socket.io -> il y a un exemple de chat à télécharger Collez cette pièce en ligne (io sur la connexion) .. j'utilise ce code qui fonctionne à 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);
});
});