簡體   English   中英

如果我已經重新連接 onclose(),為什么我需要 pingpong 來檢測 websocket 連接斷開?

[英]Why do I need ping-pong to detect websocket connection drops if I am already reconnecting onclose()?

我有連接到外部 WebSocket API 的代碼,如下所示:

const WebSocket = require('ws')

const ws = new WebSocket('wss://example.com/')

const connectExternalAPI() => {
    ws.onopen = () => { ws.send(JSON.stringify('example': 'message')) }

    ws.onerror = (event) => { console.error(event) }

    ws.onmessage = (event) => { console.log(event.data) }

    ws.onclose = (event) => {
        console.error(event)
        setTimeout(connectExternalAPI, 10000)
    }
}

由於我已經嘗試在每次連接獲得onclose時重新連接到 API,那么當這已經完成相同的事情時,還有什么必要額外實現ping-pong來檢測連接斷開(並嘗試重新連接)?

是否存在即使連接可能已斷開也不會觸發onclose情況?

如果連接被明確關閉,您幾乎會立即收到onclose ,但如果連接中斷,例如當您斷開以太網電纜時,則需要一些時間來獲得onclose ,可能不會在 TCP 檢測到連接丟失之前。 這可能需要幾分鍾,具體取決於您的設置。

順便說一下,它不一定是 Ping/Pong; 由服務器發送並在瀏覽器中接收和處理的心跳有時更容易實現。

暫無
暫無

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

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