WebSocket 建立連接後,幾分鐘不進行通信就會自動斷開,多瀏覽器測試均復現。
瀏覽器不會自動發送心跳包維持連接。若客戶端不主動實現心跳機制,伺服器或中間代理(如 Nginx、防火牆)會因超時切斷空閒連接。
proxy_read_timeout、Tomcat connectionTimeout 等參數。onclose 事件中實現指數退避重連策略。// 客戶端心跳邏輯
setInterval(() => {
if (ws.readyState === WebSocket.OPEN) {
ws.send('ping');
}
}, 30000);