Transmitir eventos
Socket.IO facilita el envío de eventos a todos los clientes conectados.
Por favor nota que la transmisión (broadcasting) es una característica solo del servidor.
A todos los clientes conectados


io.emit("hello", "world");
Los clientes que están actualmente desconectados (o en proceso de reconexión) no recibirán el evento. Almacenar este evento en algún lugar (en una base de datos, por ejemplo) depende de ti, según tu caso de uso.
A todos los clientes conectados excepto el emisor


io.on("connection", (socket) => {
socket.broadcast.emit("hello", "world");
});
En el ejemplo anterior, usar socket.emit("hello", "world") (sin la bandera broadcast) enviaría el evento al "cliente A". Puedes encontrar la lista de todas las formas de enviar un evento en la hoja de referencia.
Con acknowledgements
A partir de Socket.IO 4.5.0, ahora puedes transmitir un evento a múltiples clientes y esperar un acknowledgement de cada uno de ellos:
io.timeout(5000).emit("hello", "world", (err, responses) => {
if (err) {
// algunos clientes no confirmaron el evento en el tiempo dado
} else {
console.log(responses); // una respuesta por cliente
}
});
Todas las formas de transmisión son soportadas:
- en una sala
io.to("room123").timeout(5000).emit("hello", "world", (err, responses) => {
// ...
});
- desde un
socketespecífico
socket.broadcast.timeout(5000).emit("hello", "world", (err, responses) => {
// ...
});
- en un namespace
io.of("/the-namespace").timeout(5000).emit("hello", "world", (err, responses) => {
// ...
});
Con múltiples servidores Socket.IO
La transmisión también funciona con múltiples servidores Socket.IO.
Solo necesitas reemplazar el adaptador predeterminado por el Adaptador Redis u otro adaptador compatible.


En ciertos casos, podrías querer transmitir solo a clientes que están conectados al servidor actual. Puedes lograr esto con la bandera local:
io.local.emit("hello", "world");


Para dirigirse a clientes específicos al transmitir, por favor consulta la documentación sobre Salas.