具体实现方案如下所示:
import { useWebsocketMsessageStore } from '@/stores/websocketMsessageStore.js'
import {ElMessage} from "element-plus";
import {useUserStore} from "@/stores/userStore.js";
let webSocket = null;
let isConnect = false;
let rec = null;
let base_ip_port = 'ws://ip:端口'
let msg_status = "error"
let my_msg = "WebSocket连接已关闭,正在尝试重新连接接"
function createWebSocket(ip_port) {try {const wsUri = '/ws/msg/chatroom1/'; webSocket = new WebSocket(ip_port+wsUri);initWebSocket();} catch (e) {if(webSocket === null){console.log('尝试创建连接失败,正在尝试重新连接');reConnect(base_ip_port); }}
}
function initWebSocket() {webSocket.onopen = function (e) {console.log('WebSocket连接已打开');ElMessage({type: "success",message: "WebSocket连接已打开",duration: 3000})isConnect = true; };webSocket.onclose = function (e) {const userStore = useUserStore()console.log('WebSocket连接已关闭,正在尝试重新连接');ElMessage({type: msg_status,message: my_msg,duration: 3000})isConnect = false; if (userStore.userInfo.token){console.log("websocket onclose")reConnect(base_ip_port); }};webSocket.onmessage = function (event) {let response_data = JSON.parse(JSON.parse(event.data).message)const websocketMsessageStore = useWebsocketMsessageStore()if (response_data["each_groups_info"]){console.log('each_groups_info', response_data["each_groups_info"]);websocketMsessageStore.update_groups_info(response_data["each_groups_info"])}if (response_data["all_kill_chain"]){let result = JSON.parse(response_data['all_kill_chain'])console.log('all_kill_chain',result)websocketMsessageStore.update_kill_chains_data(result)}if (response_data["count_down_info"]){let count_down_info = JSON.parse(response_data['count_down_info'])console.log('count_down_info',count_down_info)websocketMsessageStore.update_count_down_info(count_down_info)}if (response_data["timestamp_zero"]){console.log('timestamp_zero',response_data['timestamp_zero'])websocketMsessageStore.update_timestamp_zero(response_data['timestamp_zero'])}if (response_data["persons_info"]){console.log('persons_info',response_data['persons_info'])websocketMsessageStore.update_person_info(response_data['persons_info'])}if (response_data["FindDataimage2zht"]){console.log('FindDataimage2zht',response_data["FindDataimage2zht"]);websocketMsessageStore.update_sarData(response_data['FindDataimage2zht']);};};webSocket.onerror = function (e) {console.log('WebSocket连接发生错误,正在尝试重新连接');ElMessage({type: "error",message: "WebSocket连接发生错误,正在尝试重新连接",duration: 3000})isConnect = false; reConnect(base_ip_port); };
}
export const reConnect = (ip_ports)=> {base_ip_port = ip_portsconsole.log("websocket链接")if (isConnect) return; if (rec) clearTimeout(rec); rec = setTimeout(function () {createWebSocket(base_ip_port); }, 5000);
}
const sendMsg = (msg)=> {webSocket.send(msg)
}
export const closeConn = (args="wss://ip:端口", msg="已主动关闭WebSocket连接")=> {webSocket.close();msg_status = "success"my_msg = msgbase_ip_port = args
}
function getRandomInt(min, max) {return Math.floor(Math.random() * (max - min + 1)) + min;
}
export const sendSocketMsg = ()=>{sendMsg(JSON.stringify({text: "你好啊",counts: getRandomInt(0, 10)}))
}
连接webosocket的函数:reConnect 。断开连接websocket的函数:closeConn