From 59dd5c96e8bca3341d1166a9a350f0731436817b Mon Sep 17 00:00:00 2001
From: qx <1084500556@qq.com>
Date: 星期四, 24 七月 2025 10:27:41 +0800
Subject: [PATCH] Merge branch 'master' of http://101.42.27.146:5001/r/ltkj_peisweb

---
 src/utils/websocket.js |   45 +++++++++++++++++++++++++++++++--------------
 1 files changed, 31 insertions(+), 14 deletions(-)

diff --git a/src/utils/websocket.js b/src/utils/websocket.js
index 40529b1..9d956c5 100644
--- a/src/utils/websocket.js
+++ b/src/utils/websocket.js
@@ -1,6 +1,7 @@
 // src/utils/websocket.js
 let ws = null;
 let reconnectAttempts = 0;
+let pingTimer = null; // 鐢ㄤ簬绠$悊蹇冭烦瀹氭椂鍣�
 const maxReconnectAttempts = 5;
 const reconnectInterval = 5000; // 5绉掗噸杩為棿闅�
 const pingInterval = 5000; // 5绉掑彂閫乸ing
@@ -11,21 +12,33 @@
     return;
   }
 
-  const wsUrl = `ws://192.168.1.2:5011/ws?token=${token}`;
+  // 濡傛灉 ws 宸插瓨鍦ㄤ笖杩炴帴娲昏穬锛屽垯璺宠繃鍒濆鍖�
+  if (ws && ws.readyState === WebSocket.OPEN) {
+    console.log('WebSocket 宸茶繛鎺ワ紝璺宠繃閲嶅鍒濆鍖�');
+    return;
+  }
+
+  // 濡傛灉 ws 瀛樺湪浣嗘湭鍏抽棴锛屽厛鍏抽棴鏃ц繛鎺�
+  if (ws) {
+    console.warn('鍙戠幇鏃� WebSocket 杩炴帴锛屾鍦ㄥ叧闂�...');
+    closeWebSocket();
+  }
+
+  const wsUrl = `ws://192.168.1.244:5011/ws?token=${token}`;
   ws = new WebSocket(wsUrl);
 
   ws.onopen = () => {
-    console.log('WebSocket 杩炴帴鎴愬姛');
-    reconnectAttempts = 0;
+    reconnectAttempts = 0; // 閲嶇疆閲嶈繛璁℃暟
 
     // 鍚姩蹇冭烦鏈哄埗
-    const pingTimer = setInterval(() => {
-      if (ws.readyState === WebSocket.OPEN) {
-        console.log('鍙戦�� ping 娑堟伅');
+    if (pingTimer) clearInterval(pingTimer); // 娓呯悊鏃у畾鏃跺櫒
+    pingTimer = setInterval(() => {
+      if (ws && ws.readyState === WebSocket.OPEN) {
         ws.send('ping');
       } else {
         console.warn('WebSocket 鏈繛鎺ワ紝鍋滄 ping');
         clearInterval(pingTimer);
+        pingTimer = null;
       }
     }, pingInterval);
   };
@@ -35,6 +48,7 @@
     console.log('WebSocket 鏀跺埌鍘熷娑堟伅:', data);
     if (data === 'pong') {
       console.log('鏀跺埌 pong 鍝嶅簲锛岃繛鎺ユ椿璺�');
+      reconnectAttempts = 0; // 閲嶇疆閲嶈繛璁℃暟锛岀‘淇濇椿璺冭繛鎺ヤ笉瑙﹀彂閲嶈繛
       return;
     }
     onMessage('message', data);
@@ -42,11 +56,14 @@
 
   ws.onerror = (error) => {
     console.error('WebSocket 閿欒:', error);
-    onMessage('error', 'WebSocket 杩炴帴閿欒');
   };
 
   ws.onclose = () => {
-    console.warn('WebSocket 杩炴帴鍏抽棴');
+    console.warn('WebSocket 杩炴帴鍏抽棴锛屾椂闂�:', new Date());
+    if (pingTimer) {
+      clearInterval(pingTimer);
+      pingTimer = null;
+    }
     if (reconnectAttempts < maxReconnectAttempts) {
       reconnectAttempts++;
       console.log(`灏濊瘯閲嶈繛 (${reconnectAttempts}/${maxReconnectAttempts})...`);
@@ -61,18 +78,18 @@
 
   // 娓呯悊 WebSocket
   window.addEventListener('beforeunload', () => {
-    if (ws) {
-      ws.close();
-      ws = null;
-      console.log('WebSocket 宸叉竻鐞�');
-    }
-  });
+    closeWebSocket();
+  }, { once: true }); // 纭繚浜嬩欢鐩戝惉鍙坊鍔犱竴娆�
 }
 
 export function closeWebSocket() {
   if (ws) {
     ws.close();
     ws = null;
+    if (pingTimer) {
+      clearInterval(pingTimer);
+      pingTimer = null;
+    }
     console.log('WebSocket 宸插叧闂�');
   }
 }
\ No newline at end of file

--
Gitblit v1.8.0