簡體   English   中英

從一個套接字發出兩個事件

[英]emit two events from one socket

我正試圖從一個插座中聽兩個不同的事件; 兩者在一起都不起作用,只有第一個被發射才能聽。

//server
​
_this.nsp.volatile.emit('event1', foo);
_this.nsp.volatile.emit('event2', bar);
​

//client
​
socket.on('event1', function(data){
    //THIS ONE WORK
    console.log("event1");
});
socket.on('event2', function(data){
    //THIS ONE NOT
    console.log("event2");
});

在此示例中, event1將起作用,但event2不起作用。

如果我發出第一個event2event2將工作,但不是event1

知道如何讓它工作嗎?

TL; DR:如果要確保發送消息,請不要使用volatile

使用volatile意味着允許刪除消息。 換句話說:你不能依靠他們被傳遞,或者以任何特定的順序。

我用類似的代碼運行了一個快速測試:

io.on('connection', (socket) => {
  socket.volatile.emit('event1', '1');
  socket.volatile.emit('event2', '2');
});

這兩條消息都沒有傳遞(無論如何,在我的設置中)。 據我所知,調試輸出的原因是服務器和客戶端仍在協商發送消息時要使用的傳輸。 因為它們是易失性的,所以一旦協商完成,服務器就不會將它們排隊以將它們發送出去。

在等待一段時間后發出消息時會發生類似情況:

io.on('connection', (socket) => {
  setTimeout(() => {
    socket.volatile.emit('event1', '1');
    socket.volatile.emit('event2', '2');
  }, 2000);
});

這里收到第一條消息但第二條消息沒有收到(這似乎與你的情況相似)。 調試日志顯示如下:

  socket.io:client writing packet {"type":2,"data":["event1","1"],"nsp":"/"} +1s
  socket.io-parser encoding packet {"type":2,"data":["event1","1"],"nsp":"/"} +0ms
  socket.io-parser encoded {"type":2,"data":["event1","1"],"nsp":"/"} as 2["event1","1"] +1ms
  engine:socket sending packet "message" (2["event1","1"]) +0ms
  engine:socket flushing buffer to transport +0ms
  engine:ws writing "42["event1","1"]" +0ms
  socket.io:client writing packet {"type":2,"data":["event2","2"],"nsp":"/"} +0ms
  socket.io-parser encoding packet {"type":2,"data":["event2","2"],"nsp":"/"} +0ms
  socket.io-parser encoded {"type":2,"data":["event2","2"],"nsp":"/"} as 2["event2","2"] +0ms

由此,我必須得出結論,第二條消息編碼的,但沒有傳遞給engine.io部分,它處理實際的通信。 不過,它並沒有說明原因。 也許這是因為第一個事件仍然被發送出去,但這只是我的猜想。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM