Socket IO send to specific user ID

Je souhaite envoyer des données à l'utilisateur spécifié, et personne d'autre.

Actuellement diffusé à tous ceux que je fais:

socket.on('newChatMessage', function (message) { socket.broadcast.emit('newChatMessage_response', { data: message}); }); 

Maintenant, ce que je veux faire, c'est simplement quelque chose comme:

 socket.on('newChatMessage', function (message) { socket.to(5).send('newChatMessage_response', { data: message}); }); 

À (5) serait l'utilisateur avec l'ID de 5.

Je pense que la pièce manquante pour vous est dans cette fonction: io.sockets.on('connection', function(socket) { ... }); – Cette fonction s'exécute chaque fois qu'il y a un événement de connexion. Et chaque fois que l'événement se déclenche, l'argument 'socket' fait référence à un nouvel objet socket, représentant l'utilisateur nouvellement connecté. Vous devez ensuite stocker cet objet socket quelque part de la manière suivante pour pouvoir l'examiner ultérieurement, pour appeler la méthode d'émission ou d'émission, si vous devez envoyer des messages qui ne seront visibles que par ce socket.

Voici un exemple rapide qui devrait vous aider à démarrer. ( Note : Je n'ai pas testé cela, je ne recommande pas non plus que c'est la meilleure façon de faire ce que vous essayez de faire. Je viens de l'écrire dans l'éditeur de réponses pour vous donner une idée de la façon dont vous pourriez faire ce que vous Je cherche à faire)

 var allSockets = []; io.sockets.on('connection', function(socket) { var userId = allSockets.push(socket); socket.on('newChatMessage', function(message) { socket.broadcast.emit('newChatMessage_response', {data: message}); }); socket.on('privateChatMessage', function(message, toId) { allSockets[toId-1].emit('newPrivateMessage_response', {data: message}); }); socket.broadcast.emit('newUserArrival', 'New user arrived with id of: ' + userId); }); 

Edit: Si par ID vous faites référence à la valeur d'identification assignée par socket.io, pas une valeur que vous avez attribuée, vous pouvez obtenir une socket avec une valeur d'identification spécifique en utilisant var socket = io.sockets.sockets['1981672396123987']; (Syntaxe supérieure testée à l'aide de socket.io v0.7.9)

Il est difficile de dire exactement comment procéder sans voir votre code complet, mais il semble que vous souhaitez appeler la méthode d'émission sur le socket individuel sur lequel vous essayez d'envoyer. Si cela est différent de la prise de connexion (c.-à-d., Un partenaire de chat privé), vous aurez besoin d'une autre façon de stocker et de récupérer la socket correcte avec laquelle vous essayez de communiquer.

 var sck = someFunctionToGetAppropriateSocketObject(); sck.emit('newChatMessage_response', { data: message}); 

Voir http://socket.io/#how-to-use et https://github.com/learnboost/socket.io