web-dev-qa-db-fra.com

Socket.io chambres différence entre broadcast.to et sockets.in

Le fichier readme de Socket.io contient l'exemple suivant:

var io = require('socket.io').listen(80);

io.sockets.on('connection', function (socket) {
  socket.join('justin bieber fans');
  socket.broadcast.to('justin bieber fans').emit('new fan');
  io.sockets.in('rammstein fans').emit('new non-fan');
});

Quelle est la différence entre socket.broadcast.to() et io.sockets.in()?

99
knex

socket.broadcast.to diffuse sur tous les sockets de la pièce, sauf sur le socle sur lequel il a été appelé alors que io.sockets.in diffuse sur toutes les prises de la même pièce.

116
Daniel Baulig

Node.js était quelque chose qui m'intéressait vraiment depuis longtemps et je l'ai utilisé dans l'un de mes projets pour créer un jeu multijoueur.

io.sockets.in().emit() et socket.broadcast.to().emit() sont les deux principales méthodes d'émission que nous utilisons dans les salles de Socket.io ( https://github.com/LearnBoost/socket.io/wiki/Rooms ) Les salles permettent un partitionnement simple des clients connectés. Cela permet d’émettre des événements avec des sous-ensembles de la liste de clients connectés et offre une méthode simple de gestion.

Ils nous permettent de gérer les sous-ensembles de la liste de clients connectés (que nous appelons des salles) et d’avoir les mêmes fonctionnalités que les fonctions socket.io principales io.sockets.emit() et socket.broadcast.emit().

Quoi qu'il en soit, je vais essayer de donner des exemples de codes avec les commentaires à expliquer. Voyez si cela aide;

Socket.io Rooms

i) io.sockets.in (). emit ();

/* Send message to the room1. It broadcasts the data to all 
   the socket clients which are connected to the room1 */

io.sockets.in('room1').emit('function', {foo:bar});

ii) socket.broadcast.to (). emit ();

io.sockets.on('connection', function (socket) {
    socket.on('function', function(data){

        /* Broadcast to room1 except the sender. In other Word, 
            It broadcast all the socket clients which are connected 
            to the room1 except the sender */
        socket.broadcast.to('room1').emit('function', {foo:bar});

    }
}

Socket.io

i) io.sockets.emit ();

/* Send message to all. It broadcasts the data to all 
   the socket clients which are connected to the server; */

io.sockets.emit('function', {foo:bar});

ii) socket.broadcast.emit ();

io.sockets.on('connection', function (socket) {
    socket.on('function', function(data){

        // Broadcast to all the socket clients except the sender
        socket.broadcast.emit('function', {foo:bar}); 

    }
}

À votre santé

37
Gokhan Tank

Mise à jour 2019: socket.io est un module spécial qui utilise des websockets puis passe à la scrutation des requêtes http. Pour les websockets uniquement: pour le client, utilisez les websockets natifs et pour node.js, utilisez ws ou cette bibliothèque.

Exemple simple

La syntaxe est déroutante dans socketio. De plus, chaque socket est automatiquement connecté à sa propre pièce avec l'identifiant socket.id _ (c'est comme ça que le chat privé fonctionne dans socketio, ils utilisent des salles).

Envoyer à l'expéditeur et à personne d'autre

socket.emit('hello', msg);

Envoyer à tout le monde y compris l'expéditeur (si l'expéditeur est dans la pièce) dans la pièce " ma chambre "

io.to('my room').emit('hello', msg);

Envoyer à tout le monde à l'exception de l'expéditeur (si l'expéditeur est dans la pièce) dans la pièce " ma chambre "

socket.broadcast.to('my room').emit('hello', msg);

Envoyer à tout le monde dans chaque pièce , y compris l'expéditeur

io.emit('hello', msg); // short version

io.sockets.emit('hello', msg);

Envoyer à un socket spécifique uniquement (chat privé)

socket.broadcast.to(otherSocket.id).emit('hello', msg);
31
Karl Morrison

Dans Socket.IO 1.0, .to () et .in () sont identiques. Et les autres dans la salle recevront le message. Le client l'envoie ne recevra pas le message.

Découvrez le code source (v1.0.6):

https://github.com/Automattic/socket.io/blob/a40068b5f328fe50a2cd1e54c681be792d89a595/lib/socket.js#L17

1
James J. Ye