Ana içeriğe geç

Emit kılavuzu

uyarı

Aşağıdaki olay adları rezerve edilmiştir ve uygulamanızda kullanılmamalıdır:

  • connect
  • connect_error
  • disconnect
  • disconnecting
  • newListener
  • removeListener
// Kötü, hata verecek
socket.emit("disconnecting");

Sunucu

Tek istemci

Temel emit

io.on("connection", (socket) => {
socket.emit("hello", 1, "2", { 3: "4", 5: Buffer.from([6]) });
});

Onay

io.on("connection", (socket) => {
socket.emit("hello", "world", (arg1, arg2, arg3) => {
// ...
});
});
io.on("connection", async (socket) => {
const response = await socket.emitWithAck("hello", "world");
});

Onay ve zaman aşımı

io.on("connection", (socket) => {
socket.timeout(5000).emit("hello", "world", (err, arg1, arg2, arg3) => {
if (err) {
// istemci belirlenen gecikme süresinde olayı onaylamadı
} else {
// ...
}
});
});
io.on("connection", async (socket) => {
try {
const response = await socket.timeout(5000).emitWithAck("hello", "world");
} catch (e) {
// istemci belirlenen gecikme süresinde olayı onaylamadı
}
});

Yayınlama

Tüm bağlı istemcilere

io.emit("hello");

Gönderen hariç

io.on("connection", (socket) => {
socket.broadcast.emit("hello");
});

Onaylar

io.timeout(5000).emit("hello", "world", (err, responses) => {
if (err) {
// bazı istemciler belirlenen gecikme süresinde olayı onaylamadı
} else {
console.log(responses); // her istemci için bir yanıt
}
});
try {
const responses = await io.timeout(5000).emitWithAck("hello", "world");
console.log(responses); // her istemci için bir yanıt
} catch (e) {
// bazı istemciler belirlenen gecikme süresinde olayı onaylamadı
}

Bir odada

  • "my room" adlı odadaki tüm bağlı istemcilere
io.to("my room").emit("hello");
  • "my room" adlı odada olmayan tüm bağlı istemcilere
io.except("my room").emit("hello");
  • birden fazla koşul ile
io.to("room1").to(["room2", "room3"]).except("room4").emit("hello");

Bir ad alanında

io.of("/my-namespace").emit("hello");
ipucu

Modifiye ediciler kesinlikle birbirine zincirlenebilir:

io.of("/my-namespace").on("connection", (socket) => {
socket
.timeout(5000)
.to("room1")
.to(["room2", "room3"])
.except("room4")
.emit("hello", (err, responses) => {
// ...
});
});

Bu, şu anda bağlı olan tüm istemcilere "hello" olayını yayınlar:

  • my-namespace adlı ad alanında
  • room1, room2 ve room3 adlı odalardan en az birinde, ancak room4'te değil
  • gönderen hariç

Ve önümüzdeki 5 saniye içinde bir onay bekler.

Sunucular arasında

Temel emit

io.serverSideEmit("hello", "world");

Alıcı taraf:

io.on("hello", (value) => {
console.log(value); // "world"
});

Onaylar

io.serverSideEmit("hello", "world", (err, responses) => {
if (err) {
// bazı sunucular belirlenen gecikme süresinde olayı onaylamadı
} else {
console.log(responses); // mevcut olan dışında her sunucu için bir yanıt
}
});
try {
const responses = await io.serverSideEmitWithAck("hello", "world");
console.log(responses); // mevcut olan dışında her sunucu için bir yanıt
} catch (e) {
// bazı sunucular belirlenen gecikme süresinde olayı onaylamadı
}

Alıcı taraf:

io.on("hello", (value, callback) => {
console.log(value); // "world"
callback("hi");
});

İstemci

Temel emit

socket.emit("hello", 1, "2", { 3: "4", 5: Uint8Array.from([6]) });

Onay

socket.emit("hello", "world", (arg1, arg2, arg3) => {
// ...
});
const response = await socket.emitWithAck("hello", "world");

Onay ve zaman aşımı

socket.timeout(5000).emit("hello", "world", (err, arg1, arg2, arg3) => {
if (err) {
// sunucu belirlenen gecikme süresinde olayı onaylamadı
} else {
// ...
}
});
try {
const response = await socket.timeout(5000).emitWithAck("hello", "world");
} catch (e) {
// sunucu belirlenen gecikme süresinde olayı onaylamadı
}