El archivo Léame de Socket.io contiene el siguiente ejemplo:
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');
});
¿Cuál es la diferencia entre socket.broadcast.to()
y io.sockets.in()
?
Respuestas:
socket.broadcast.to
se transmite a todos los enchufes de la habitación dada, excepto al enchufe en el que se llamó, mientras que seio.sockets.in
transmite a todos los enchufes de la habitación dada.fuente
Node.js era algo que realmente me interesó durante un tiempo y lo usé en uno de mis proyectos para hacer un juego multijugador.
io.sockets.in().emit()
ysocket.broadcast.to().emit()
son los dos métodos de emisión principales que usamos en las habitaciones de Socket.io ( https://github.com/LearnBoost/socket.io/wiki/Rooms ) Las habitaciones permiten una partición simple de los clientes conectados. Esto permite que los eventos se emitan con subconjuntos de la lista de clientes conectados y proporciona un método simple para administrarlos.Nos permiten administrar los subconjuntos de la lista de clientes conectados (que llamamos habitaciones) y tener funcionalidades similares como las funciones principales de socket.io
io.sockets.emit()
ysocket.broadcast.emit()
.De todos modos intentaré dar los códigos de ejemplo con los comentarios para explicar. Vea si ayuda;
Habitaciones Socket.io
i) io.sockets.in (). emit ();
ii) socket.broadcast.to (). emit ();
Socket.io
i) io.sockets.emit ();
ii) socket.broadcast.emit ();
Salud
fuente
Actualización 2019 : socket.io es un módulo especial que usa websockets y luego recurre al sondeo de solicitud http. Solo para websockets: para el cliente, use websockets nativos y para node.js use ws o esta biblioteca.
Ejemplo simple
La sintaxis es confusa en socketio. Además, cada socket se conecta automáticamente a su propia habitación con la identificación
socket.id
(así es como funciona el chat privado en socketio, usan habitaciones).Enviar al remitente y a nadie más
Enviar a todos, incluido el remitente (si el remitente está en la sala) en la sala "mi sala"
Enviar a todos menos al remitente (si el remitente está en la sala) en la sala "mi sala"
Enviar a todos en cada habitación , incluido el remitente
Enviar solo a un socket específico (chat privado)
fuente
otherSocket.on('connect',()=> { console.log(otherSocket.id); });
fuente
En Socket.IO 1.0, .to () y .in () son lo mismo. Y otros en la sala recibirán el mensaje. El cliente lo envía, no recibirá el mensaje.
Consulte el código fuente (v1.0.6):
https://github.com/Automattic/socket.io/blob/a40068b5f328fe50a2cd1e54c681be792d89a595/lib/socket.js#L173
fuente
.to()
y,in
son lo mismo, entonces, ¿qué sucedería cuando creo una habitación con el mismo nombre exacto que la identificación de algún socket? ¿Qué haría entonces,socket.broadcast.to(socketid)
por ejemplo?