Envoi de message à un identifiant spécifique dans Socket.IO 1.0

Je veux envoyer des données à un identifiant de socket spécifique.

Nous pouvions le faire 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 offrent une meilleure solution pour cela. Chaque socket rejoint automatiquement une pièce par défaut par self. Vérifier les documents: http://socket.io/docs/rooms-and-namespaces/#default-room

Ainsi, vous pouvez é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'); } 

Mettre à jour:

La réponse de @ MustafaDokumacı contient une meilleure solution.

@Mustafa Dokumacı et @Curious ont déjà fourni suffisamment d’informations, j’ajoute comment vous pouvez obtenir l’identifiant de socket.

Pour obtenir l’identifiant du 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:

 //Defining the namespace 
var nsp = io.of('/my-namespace'); //targeting the message to socket id
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 est que, avec la solution de @ MustafaDokumacı, le message est diffusé dans une pièce et pas seulement à un client particulier.

La différence est importante 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 ceci en ligne (io à la connexion) partie .. 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); }); });