Ir al contenido principal
Versión: 4.x

Transmitir eventos

Socket.IO facilita el envío de eventos a todos los clientes conectados.

información

Por favor nota que la transmisión (broadcasting) es una característica solo del servidor.

A todos los clientes conectados

Transmitiendo a todos los clientes conectadosTransmitiendo a todos los clientes conectados
io.emit("hello", "world");
precaución

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

Transmitiendo a todos los clientes conectados excepto el emisorTransmitiendo a todos los clientes conectados excepto el emisor
io.on("connection", (socket) => {
socket.broadcast.emit("hello", "world");
});
nota

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 socket especí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.

Transmitiendo con RedisTransmitiendo con Redis

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");
Transmitiendo con Redis pero localTransmitiendo con Redis pero local

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