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