Hoja de referencia de emit
precaución
Los siguientes nombres de eventos están reservados y no deben usarse en tu aplicación:
connectconnect_errordisconnectdisconnectingnewListenerremoveListener
// MAL, lanzará un error
socket.emit("disconnecting");
Servidor
Cliente único
Emit básico
io.on("connection", (socket) => {
socket.emit("hello", 1, "2", { 3: "4", 5: Buffer.from([6]) });
});
Acknowledgement
- Callback
- Promise
io.on("connection", (socket) => {
socket.emit("hello", "world", (arg1, arg2, arg3) => {
// ...
});
});
io.on("connection", async (socket) => {
const response = await socket.emitWithAck("hello", "world");
});
Acknowledgement y timeout
- Callback
- Promise
io.on("connection", (socket) => {
socket.timeout(5000).emit("hello", "world", (err, arg1, arg2, arg3) => {
if (err) {
// el cliente no confirmó el evento en el tiempo dado
} else {
// ...
}
});
});
io.on("connection", async (socket) => {
try {
const response = await socket.timeout(5000).emitWithAck("hello", "world");
} catch (e) {
// el cliente no confirmó el evento en el tiempo dado
}
});
Broadcasting
A todos los clientes conectados
io.emit("hello");
Excepto el emisor
io.on("connection", (socket) => {
socket.broadcast.emit("hello");
});
Acknowledgements
- Callback
- Promise
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
}
});
try {
const responses = await io.timeout(5000).emitWithAck("hello", "world");
console.log(responses); // una respuesta por cliente
} catch (e) {
// algunos clientes no confirmaron el evento en el tiempo dado
}
En una sala
- a todos los clientes conectados en la sala llamada "my room"
io.to("my room").emit("hello");
- a todos los clientes conectados excepto los de la sala llamada "my room"
io.except("my room").emit("hello");
- con múltiples cláusulas
io.to("room1").to(["room2", "room3"]).except("room4").emit("hello");
En un namespace
io.of("/my-namespace").emit("hello");
consejo
Los modificadores pueden absolutamente encadenarse:
io.of("/my-namespace").on("connection", (socket) => {
socket
.timeout(5000)
.to("room1")
.to(["room2", "room3"])
.except("room4")
.emit("hello", (err, responses) => {
// ...
});
});
Esto emitirá un evento "hello" a todos los clientes conectados:
- en el namespace llamado
my-namespace - en al menos una de las salas llamadas
room1,room2yroom3, pero no enroom4 - excepto el emisor
Y espera un acknowledgement en los próximos 5 segundos.
Entre servidores
Emit básico
io.serverSideEmit("hello", "world");
Lado receptor:
io.on("hello", (value) => {
console.log(value); // "world"
});
Acknowledgements
- Callback
- Promise
io.serverSideEmit("hello", "world", (err, responses) => {
if (err) {
// algunos servidores no confirmaron el evento en el tiempo dado
} else {
console.log(responses); // una respuesta por servidor (excepto el actual)
}
});
try {
const responses = await io.serverSideEmitWithAck("hello", "world");
console.log(responses); // una respuesta por servidor (excepto el actual)
} catch (e) {
// algunos servidores no confirmaron el evento en el tiempo dado
}
Lado receptor:
io.on("hello", (value, callback) => {
console.log(value); // "world"
callback("hi");
});
Cliente
Emit básico
socket.emit("hello", 1, "2", { 3: "4", 5: Uint8Array.from([6]) });
Acknowledgement
- Callback
- Promise
socket.emit("hello", "world", (arg1, arg2, arg3) => {
// ...
});
const response = await socket.emitWithAck("hello", "world");
Acknowledgement y timeout
- Callback
- Promise
socket.timeout(5000).emit("hello", "world", (err, arg1, arg2, arg3) => {
if (err) {
// el servidor no confirmó el evento en el tiempo dado
} else {
// ...
}
});
try {
const response = await socket.timeout(5000).emitWithAck("hello", "world");
} catch (e) {
// el servidor no confirmó el evento en el tiempo dado
}