From 55ed081b8414698e6e3b7d76c5c4032f264fb53f Mon Sep 17 00:00:00 2001 From: wwl <xchao828@163.com> Date: 星期四, 24 七月 2025 09:10:27 +0800 Subject: [PATCH] 1 --- 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