// WebSocket连接配置 type WebSocketOptions = { fullUrl: string; onMessage?: (data: string) => void; onOpen?: () => void; onError?: (error: Event) => void; onClose?: () => void; reconnectInterval?: number; }; let websocket: WebSocket | null = null; let reconnectTimer: any = null; let isManualClose = false; // 初始化WebSocket连接 export function initWebSocket(options: WebSocketOptions) { const { fullUrl, onMessage, onOpen, onError, onClose, reconnectInterval = 3000 } = options; // 关闭旧连接 if (websocket) { websocket.close(); } // 检查浏览器支持性 if (!('WebSocket' in window)) { console.error('当前浏览器不支持WebSocket'); return; } // 创建WebSocket连接 try { websocket = new WebSocket(fullUrl); // 连接成功回调 websocket.onopen = () => { clearTimeout(reconnectTimer!); isManualClose = false; onOpen?.(); }; // 接收消息回调 websocket.onmessage = (event) => { onMessage?.(event.data); }; // 错误回调 websocket.onerror = (error) => { onError?.(error); startReconnect(() => initWebSocket(options), reconnectInterval); }; // 关闭回调 websocket.onclose = () => { onClose?.(); if (!isManualClose) { startReconnect(() => initWebSocket(options), reconnectInterval); } }; } catch (error) { console.error('WebSocket连接创建失败:', error); startReconnect(() => initWebSocket(options), reconnectInterval); } } // 发送消息 export function sendWebSocketMessage(message: any): boolean { if (websocket && websocket.readyState === WebSocket.OPEN) { websocket.send(JSON.stringify(message)); return true; } console.error('WebSocket未连接,无法发送消息'); return false; } // 手动关闭WebSocket export function closeWebSocket(): void { isManualClose = true; if (reconnectTimer) { clearTimeout(reconnectTimer); } websocket?.close(); websocket = null; } // 启动重连 function startReconnect(connectCallback: () => void, interval: number): void { if (reconnectTimer) { clearTimeout(reconnectTimer); } reconnectTimer = setTimeout(connectCallback, interval); } // 获取当前连接状态 export function getWebSocketState(): number | null { return websocket?.readyState || null; }