// src/services/websocketService.js import baseUrl from '@/utils/baseUrl'; class WebSocketService { constructor() { this.ws = null; this.isConnected = false; this.messageListeners = []; } connect(token) { if (this.ws) { this.ws.close(); } const baseUrls = baseUrl.WebsocketUrl; // 替换为你的 ws 地址 const url = `${baseUrls}?token=${token}`; console.log('#############websocket url:', url); this.ws = new window.WebSocket(url); this.ws.onopen = () => { this.isConnected = true; console.log('[WebSocket] 连接成功'); }; this.ws.onmessage = (event) => { console.log('#############websocket event:', event); let message; try { // 尝试解析为 JSON message = JSON.parse(event.data); } catch (error) { // 如果不是 JSON 格式,直接使用原始字符串 message = event.data; } console.log('#############websocket message:', message); this.messageListeners.forEach(cb => { if (typeof cb === 'function') { cb(message); } }); }; this.ws.onclose = (event) => { this.isConnected = false; console.log('[WebSocket] 连接关闭', event); }; } send(data) { if (this.ws && this.isConnected) { // 如果 data 是字符串,直接发送;否则转换为 JSON const message = typeof data === 'string' ? data : JSON.stringify(data); this.ws.send(message); } } addMessageListener(cb) { this.messageListeners.push(cb); } removeMessageListener(cb) { this.messageListeners = this.messageListeners.filter(fn => fn !== cb); } getReadyState() { // 0: CONNECTING, 1: OPEN, 2: CLOSING, 3: CLOSED return this.ws ? this.ws.readyState : null; } } const wsService = new WebSocketService(); export default wsService;