import {ref} from "vue"; /** * websocket公用方法 */ const socket = ()=>{ let timer = null; let ws = null; let isConnect = ref(false); let count = 0; // WebSocket连接 const connectWebsocket = (url) => { if (count > 5) { connectError() return } try { // 正在建立连接 ws = new WebSocket(URL) initWebSocket() // 初始化WebSocket连接 } catch { // 建立连接出错,重新连接 connect() } } // 重新连接WebSocket const connect = ()=>{ if(isConnect.value) return console.info('尝试重新连接WebSocket'); if(timer) clearTimeout(timer) timer = setTimeout(()=>{ count++; connectWebsocket() }, 5000); } // 初始化WebSocket连接 const initWebSocket = ()=>{ ws.onopen = function () { // WebSocket连接成功 isConnect.value = true; console.success('WebSocket连接成功') } ws.onerror = function () { // WebSocket连接发生错误 isConnect = false; connect() console.error('WebSocket连接发生错误,正在尝试重新连接') } ws.onclose = function (e) { // 已关闭WebSocket连接 isConnect.value = false console.warn('已关闭WebSocket连接') } ws.onmessage = function (data) { // 接收到服务端发送的数据 receive(data) } } const connectError = () => { console.log('WebSocket连接失败') clearTimeout(timer) } return { ws, connectWebsocket, }; }; export default socket;