import { ref, reactive } from 'vue'; export const useWebSocket = (protocols) => { let ws = null; const messages = ref([]); const status = reactive({ isConnected: false, error: null }); // 事件监听 const connect = () => { // 创建新的WebSocket实例,使用配置文件中配置的端口 ws = new WebSocket("ws://localhost:9260/", protocols); ws.onopen = () => { status.isConnected = true; console.log('WebSocket 连接成功'); }; ws.onmessage = (event) => { try { const data = JSON.parse(event.data); messages.value.push(data); } catch (e) { console.error('消息解析失败', e); } }; ws.onclose = (event) => { status.isConnected = false; console.log('连接关闭,准备重连...'); setTimeout(connect, 3000); // 3秒后重连 }; ws.onerror = (error) => { status.error = error; console.error('WebSocket 错误:', error); }; }; // 初始化连接 connect(); // 发送消息方法 const send = (data) => { if (status.isConnected && ws) { ws.send(JSON.stringify(data)); } }; return { ws, messages, status, send, close: () => ws && ws.close(), reconnect: connect }; };