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ındaroom1
,room2
veroom3
adlı odalardan en az birinde, ancakroom4
'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ı
}