io.émettre vs socket.émettre

Je suis nouveau à socket.io et ont couru à quelque chose qui semble assez bizarre. Je ne connais pas vraiment la différence entre socket.emit et io.emit mais je ne trouve aucune explication.

io.on('connection', function(socket){
  io.emit('connected')  // <<<< HERE >> socket.emit('connected');
  socket.on('disconnect', function(){
    io.emit('disconnect')
  });
  socket.on('chat message', function(msg){
    io.emit('chat message', msg);
  });
});

server.listen(3000);

C'est mon truc de serveur cependant quand je change le io en socket ce message n'est affiché que lorsque l'utilisateur qui se connecte se connecte. io.emit envoie le message à tous les utilisateurs.

Peut-être que c'est censé être comme ça, ou c'est peut être une horrible hack? Faites-moi savoir si vous avez besoin de la côté client HTML.

24
demandé sur halfer 0000-00-00 00:00:00

2 réponses

La variable io représente le groupe de sockets. Le code que vous avez Commence sur la première ligne en fournissant une fonction dans le second paramètre qui vous donne une variable socket chaque fois qu'une nouvelle connexion est établie. La variable socket sert uniquement à communiquer avec chaque connexion individuelle. Vous ne pouvez pas le voir dans le code mais il y aura une variable socket pour chaque connexion établie

26
répondu kezi 2015-09-20 03:29:55

Voici une documentation supplémentaire pour référence.

socket.emit('message', "this is a test"); //sending to sender-client only
socket.broadcast.emit('message', "this is a test"); //sending to all clients except sender
socket.broadcast.to('game').emit('message', 'nice game'); //sending to all clients in 'game' room(channel) except sender
socket.to('game').emit('message', 'enjoy the game'); //sending to sender client, only if they are in 'game' room(channel)
socket.broadcast.to(socketid).emit('message', 'for your eyes only'); //sending to individual socketid
io.emit('message', "this is a test"); //sending to all clients, include sender
io.in('game').emit('message', 'cool game'); //sending to all clients in 'game' room(channel), include sender
io.of('myNamespace').emit('message', 'gg'); //sending to all clients in namespace 'myNamespace', include sender
socket.emit(); //send to all connected clients
socket.broadcast.emit(); //send to all connected clients except the one that sent the message
socket.on(); //event listener, can be called on client to execute on server
io.sockets.socket(); //for emiting to specific clients
io.sockets.emit(); //send to all connected clients (same as socket.emit)
io.sockets.on() ; //initial connection from a client.

Espérons que cela aide!.

45
répondu Kent Aguilar 2016-11-27 14:17:47