let socketUrl: any = '';
let websocket: any = null;
let heartTime: any = null;
let socketHeart: number = 0;
let HeartTimeOut: number = 30000;
let socketError: number = 0;
const initWebSocket = (url: any) => {
socketUrl = url;
websocket = new WebSocket(url);
websocketonopen();
websocketonmessage();
websocketonerror()
websocketclose()
sendSocketHeart()
};
onMounted(() => {
initWebSocket(socketUrl);
})
const websocketonopen = () => {
websocket.onopen = function (e: any) {
console.log("连接 websocket 成功", e);
resetHeart();
};
};
const websocketonerror = () => {
websocket.onerror = function (e: any) {
console.log("连接 websocket 失败", e);
};
};
const websocketclose = () => {
websocket.onclose = function (e: any) {
console.log("断开连接", e);
};
};
const websocketonmessage = () => {
websocket.onmessage = function (e: any) {
let msg = JSON.parse(e.data);
if (msg.type === 'heartbeat') {
resetHeart()
console.log("心跳");
}
console.log("收到socket消息", JSON.parse(e.data));
test(msg)
};
};
const sendMsg = (data: any) => {
websocket.send(data);
};
const resetHeart = () => {
socketHeart = 0;
socketError = 0;
clearInterval(heartTime);
sendSocketHeart();
};
const sendSocketHeart = () => {
console.log(websocket);
heartTime = setInterval(() => {
if(websocket.readyState == 1) {
console.log("心跳发送:", socketHeart);
websocket.send(
JSON.stringify({
type: "ping"
})
);
socketHeart = socketHeart + 1;
} else {
reconnect()
}
}, HeartTimeOut);
};
const reconnect = () => {
if (socketError <= 2) {
clearInterval(heartTime);
initWebSocket(socketUrl);
socketError = socketError + 1;
console.log("socket重连", socketError);
} else {
console.log("重试次数已用完的逻辑", socketError);
clearInterval(heartTime);
}
};
const test = (msg: any) => {
}