應用程式在閒置一段時間後失去持續連線

Leung Lin Ann 20 信譽點數
2026-10-12T03:58:16.5333333+00:00

一個基於 Windows 的即時應用程式,在用戶端閒置約 100 秒後,持續連線便會中斷。

請問如何診斷連線逾時問題,並實作應用程式層級的心跳機制,以維持連線及偵測沒有回應的用戶端?

Windows 商務版 | Windows 365 企業版
0 則留言 沒有留言

1 個回答

排序依據: 最新
  1. Domic Vo 36,835 信譽點數 獨立顧問
    2026-10-12T04:25:31.86+00:00

    用戶端閒置約 100 秒後連線中斷,通常需要檢查防火牆、NAT、負載平衡器或代理伺服器的 idle timeout,以及應用程式本身的連線逾時設定。不能單憑 100 秒這個時間就判定根因。

    在 Windows 上,可使用 Wireshark 或 pktmon 擷取斷線前後的封包,確認是否由遠端主機送出 FIN/RST,或連線只是因閒置而被中間網路設備清除。同時檢查 Windows 防火牆記錄、應用程式日誌,以及相關網路設備的 idle timeout 設定。若 TCP 連線在閒置後被清除,應用程式可能直到下一次傳送資料才發現連線已失效。

    實作上,建議在應用程式層加入 heartbeat:例如每 30 秒傳送一次 PING,伺服器回覆 PONG,若連續 2–3 次未收到回覆,便標記連線失效並執行重連。心跳間隔應短於已確認的閒置逾時,並搭配最後一次成功收發時間與逾時日誌。應用程式層心跳也能確認對端程式仍有回應;單純啟用 TCP keep-alive 並不能保證應用程式本身正常。

    若使用 Windows TCP socket,可啟用 SO_KEEPALIVE,並透過 WSAIoctl 的 SIO_KEEPALIVE_VALS 設定每條連線的探測時間與間隔;Windows 預設首次 TCP keep-alive 探測可能要等兩小時,因此預設值無法解決 100 秒閒置斷線。

    若您提供應用程式使用的協定(TCP、WebSocket、HTTP 或其他)、開發框架,以及連線是否經過代理或負載平衡器,我可以給出對應的實作範例與精確設定。

    Domic Vo.

    此回答有幫助嗎?

    0 則留言 沒有留言

您的回答

答案可由問題作者標示為「已接受」,而由仲裁者標示為「推薦」,這可協助使用者知道答案解決了作者的問題。