From 6d4e9ccb34e0292bfadba7bfd678231cb37ae8c0 Mon Sep 17 00:00:00 2001 From: qx <1084500556@qq.com> Date: 星期三, 02 七月 2025 15:45:16 +0800 Subject: [PATCH] :qx --- src/utils/websocket.js | 80 ++++++++++++++++++++++++++++++++++++++++ 1 files changed, 80 insertions(+), 0 deletions(-) diff --git a/src/utils/websocket.js b/src/utils/websocket.js new file mode 100644 index 0000000..a525f68 --- /dev/null +++ b/src/utils/websocket.js @@ -0,0 +1,80 @@ +// src/utils/websocket.js +let socket = null; +let reconnectAttempts = 0; +const maxReconnectAttempts = 5; +const reconnectInterval = 5000; +let messageCallback = null; + +const initWebSocket = (token, callback) => { + if (socket && socket.readyState === WebSocket.OPEN) { + console.log('WebSocket 宸茶繛鎺ワ紝鏃犻渶閲嶅鍒濆鍖�'); + return; + } + + if (!token) { + console.error('鏈彁渚� token锛屾棤娉曞缓绔� WebSocket 杩炴帴'); + callback('error', '鏈壘鍒� token锛屾棤娉曞缓绔� WebSocket 杩炴帴'); + return; + } + + const wsUrl = `ws://192.168.1.2:5011/ws?token=${encodeURIComponent(token)}`; + console.log('灏濊瘯杩炴帴 WebSocket:', wsUrl); + + try { + socket = new WebSocket(wsUrl); + } catch (error) { + console.error('WebSocket 鍒濆鍖栧け璐�:', error); + callback('error', '鏃犳硶鍒濆鍖� WebSocket 杩炴帴'); + return; + } + + messageCallback = callback; + + socket.onopen = () => { + console.log('WebSocket 杩炴帴鎴愬姛'); + reconnectAttempts = 0; + }; + + socket.onmessage = (event) => { + console.log('WebSocket 鏀跺埌鍘熷娑堟伅:', event.data); + if (messageCallback) { + messageCallback('message', event.data); + } + }; + + socket.onerror = (error) => { + console.error('WebSocket 閿欒:', error); + if (messageCallback) { + messageCallback('error', 'WebSocket 杩炴帴閿欒'); + } + }; + + socket.onclose = (event) => { + console.log('WebSocket 杩炴帴鍏抽棴锛屼唬鐮�:', event.code, '鍘熷洜:', event.reason); + if (reconnectAttempts < maxReconnectAttempts) { + setTimeout(() => { + console.log(`灏濊瘯閲嶈繛 (${reconnectAttempts + 1}/${maxReconnectAttempts})`); + reconnectAttempts++; + initWebSocket(token, callback); + }, reconnectInterval); + } else { + if (messageCallback) { + messageCallback('error', 'WebSocket 閲嶈繛澶辫触锛岃妫�鏌ョ綉缁滄垨鏈嶅姟鍣�'); + } + } + }; +}; + +const closeWebSocket = () => { + if (socket) { + socket.close(1000, '娴忚鍣ㄥ叧闂紝姝e父鏂紑'); + socket = null; + console.log('WebSocket 杩炴帴宸插叧闂�'); + } +}; + +window.addEventListener('beforeunload', () => { + closeWebSocket(); +}); + +export { initWebSocket, closeWebSocket }; \ No newline at end of file -- Gitblit v1.8.0