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;
|