let websock = $ref(""); //webSocket使用 let isConnect = $ref(false); //webSocket连接标识 避免重复连接 let reConnectNum = $ref(1); //断开后重新连接的次数 免得后台挂了,前端一直重连 const conceal = () => { websockList.value = []; }; const websocketonopen = () => { // console.log("WebSocket连接成功"); //连接建立后修改标识 isConnect = true; }; const websocketonerror = () => { console.log("WebSocket连接发生错误"); //连接断开后修改标识 isConnect = false; //连接错误 需要重连 reConnect(); }; const websocketonmessage = (e) => { if (e != null) { // console.log('websocketclose', e) let str = JSON.parse(e.data); // category : "SYS" // content : "您有一个通知公告,请查阅!" // createTime : 1670322927873 // createUser : "1543837863788879871" // deleteFlag : "NOT_DELETE" // id : "1600076448078106626" // msgType : 1 // subject : "您有一个通知公告,请查阅!" websockList.value = JSON.parse(JSON.stringify(str)); } }; // webSocket连接关闭 const websocketclose = () => { // console.log("webSocket连接关闭"); isConnect = false; websock = ""; reConnect(); }; // 尝试重新连接 const reConnect = () => { if (reConnectNum > 6) { // console.log("重连超过6次不再重连"); return false; } // console.log("isConnect", isConnect, $store.getters.userId); //如果已经连上就不再重试了 if (isConnect && !$store.getters.userId) return; initWebSocket($store.getters.userId); reConnectNum = reConnectNum + 1; }; const initWebSocket = (userId) => { // console.log("进入initWebSocket"); // console.log("系统用户ID:" + userId); if (userId != null && userId != "") { // WebSocket与普通的请求所用协议有所不同,ws等同于http,wss等同于https const env = import.meta.env.VITE_API_BASEURL.split("://"); let wsServer = `${env[0] === "https" ? "wss" : "ws"}://${ env[1] }/socket/message/${userId}`; // console.info("location.protocol", wsServer); //线上环境 //webSocket 前面加一个前缀xxx_websocket_ 区分后面其他项目的webSocket // let wsServer = "wss://域名地址或ip加端口/ nginx配置的 xxx_websocket/" + userId; websock = new WebSocket(wsServer); websock.onopen = websocketonopen; websock.onerror = websocketonerror; websock.onmessage = websocketonmessage; websock.onclose = websocketclose; } };