用戶端閒置約 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.