首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

WebSocket 連接自動斷開?心跳機制維持長連接

     編輯:程式設計綜合問答

現象描述

WebSocket 建立連接後,幾分鐘不進行通信就會自動斷開,多瀏覽器測試均復現。

根本原因

瀏覽器不會自動發送心跳包維持連接。若客戶端不主動實現心跳機制,伺服器或中間代理(如 Nginx、防火牆)會因超時切斷空閒連接。

解決方案

  • 客戶端主動發送心跳:定時(如每 30 秒)發送一個小數據包(如 "ping"),伺服器回應 "pong"。
  • 伺服器配置超時時間:調整 Nginx proxy_read_timeout、Tomcat connectionTimeout 等參數。
  • 斷線重連邏輯:在 onclose 事件中實現指數退避重連策略。

代碼示例

// 客戶端心跳邏輯
setInterval(() => {
    if (ws.readyState === WebSocket.OPEN) {
        ws.send('ping');
    }
}, 30000);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved