web-dev-qa-db-fra.com

node.js socket.io Comment émettre vers un client particulier?

Je souhaite "émettre" un message à un client particulier sélectionné en fonction d'un autre message reçu sur un autre client. Comment procéder?

Je songe à joindre chaque client à sa propre "salle" puis à le diffuser. Y a-t-il un meilleur moyen?

23
srinathhs

UPDATE pour socket.io version 1.0 et supérieure

io.to(socketid).emit('message', 'whatever');

Pour l'ancienne version:

Vous pouvez stocker chaque client dans un objet en tant que propriété. Ensuite, vous pouvez rechercher le socket en fonction du message:

var basket = {};

io.sockets.on('connection', function (socket) {
  socket.on("register", function(data) {
    basket[data.nickname] = socket.id;
  });
  socket.on("privmessage", function(data){
    var to = basket[data.to];
    io.sockets.socket(to).emit(data.msg);
  });
});

Pas testé ... mais ça devrait vous donner une idée

30
Francesco Laurita

Pour socket.io version 1.0, utilisez:

io.to(socketid).emit('message', 'whatever');
18
Minho Lee

Émettre à un client particulier en utilisant un socketID.

Serveur/package: socket.io:

io.to(socketID).emit('testEvent', 'yourMessage');

Client/package socket.io-client:

io.sockets.on('connection',(socket) => {
  socket.on("testEvent", data => {
    console.log(data);
  });
});

Vous pouvez obtenir un accès au socketID de la manière suivante:

io.on('connection', (socket, next) => {
    const ID = socket.id // id property on the socket Object
})

C'est simplement une propriété sur l'objet socket

0
Willem van der Veen