javascript node.js sockets socket.io

javascript - io.emit vs socket.emit



node.js sockets (3)

Soy nuevo en socket.io y he corrido a algo que parece bastante extraño. Realmente no sé la diferencia entre socket.emit y io.emit pero no puedo encontrar una explicación en ningún lado.

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);

Ese es mi asunto del servidor, sin embargo, cuando cambio el io al socket ese mensaje solo se muestra cuando el usuario que se conecta se conecta. io.emit envía el mensaje a todos los usuarios.

Tal vez se supone que es así o tal vez es solo un truco horrible? Avíseme si necesita el HTML del lado del cliente.


Aquí hay una documentación complementaria para referencia.

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.

¡Espero que esto ayude!.


Buena pregunta. Aquí hay un código de muestra que podría responder su pregunta.

código server.js:

// Escucha de las conexiones de Socket entrantes

io.on(''connection'', function(socket){ socket.on(''send'', function(msg){ console.log(''message received/sending: '' + msg); io.sockets.emit(''new'', msg); }); });

código index.html

<body> <ul id="messages"></ul> <form action=""> <input id="m" autocomplete="off" /> <button type="submit">Send</button> </form> <script src="https://code.jquery.com/jquery-1.11.1.js"></script> <script src="https://cdn.socket.io/socket.io-1.4.5.js"></script> <script> var socket = io(); function send(msg) { console.log("emitting: " + msg); socket.emit(''send'', { "message": msg }); } socket.on(''new'', function (msg) { console.log("msg " + msg.message); $(''#messages'').append($(''<li>'').text(msg.message)); }); $(function () { $(''form'').submit(function (e) { e.preventDefault(); send($(''#m'').val()); $(''#m'').val(''''); return false; }); }); </script> </body>

En index.html "socket.emit (''send'', {" message ": msg});" esta línea de código realmente envía / emite un mensaje al servidor que está esperando escuchar en "socket.on (''send'', function (msg) {" esta línea de código en server.js. Ahora "io.sockets.emit ('' new '', msg); "esta línea de server.js emite ese mensaje a todos sus sockets y se muestra a los usuarios que usan su listener en index.html que es" socket.on ('' new '', function (msg) {".

Simplemente dicho Cada socket emite su msg al servidor (io es una instancia del servidor) y el servidor a su vez lo emite a todos los sockets conectados. Así es como se muestra la msg enviada por cualquier usuario a todos los usuarios. ¡Espero que ayude!


La variable io representa el grupo de sockets. El código que tiene comienza en la primera línea y proporciona una función en el segundo parámetro que le proporciona una variable de socket cada vez que se establece una nueva conexión. La variable de socket es solo para comunicarse con cada conexión individual. Puede que no lo veas en el código, pero habrá una variable de socket para cada conexión establecida