优化长连接

This commit is contained in:
gyq
2024-07-08 09:22:40 +08:00
parent de8c5e20f4
commit d101ecea41
5 changed files with 68 additions and 211 deletions

View File

@@ -2,7 +2,7 @@
<el-config-provider size="large">
<div class="container">
<div class="left" v-if="!hideLeftMenu">
<left-menu ref="leftMenuRef" @connectWsHandle="initWebSocket()" />
<left-menu ref="leftMenuRef" @connectWsHandle="initWebSocket" />
</div>
<div :class="{ view: !hideLeftMenu }">
<!-- <div class="wrapper">
@@ -72,10 +72,10 @@ watch(route, (to) => {
}
if (to.fullPath == '/login') {
if (ws.value != null) {
console.log('关闭ws');
console.log('退出登录关闭ws');
ws.value.close()
ws.value = null
wsIsClose.value = true
// wsIsClose.value = true
}
} else {
// 打开ws
@@ -114,10 +114,12 @@ let wsIsClose = ref(false)
function initWebSocket(wsUrl = import.meta.env.VITE_API_WSS) {
createUUID()
wsIsClose.value = false
ws.value = new ReconnectingWebSocket(wsUrl, null, {
reconnectInterval: 10000
})
// wsIsClose.value = false
if (ws.value == null) {
ws.value = new ReconnectingWebSocket(`${wsUrl}`, null, {
reconnectInterval: 10000
})
}
// console.log("websocket:", ws.value);
ws.value.addEventListener('open', function (event) {
@@ -130,9 +132,9 @@ function initWebSocket(wsUrl = import.meta.env.VITE_API_WSS) {
startheartbeat()
// 清除重连
clearInterval(reConnectTimer.value)
reConnectTimer.value = null
reConnectCount.value = 0
// clearInterval(reConnectTimer.value)
// reConnectTimer.value = null
// reConnectCount.value = 0
ws.value.send(JSON.stringify({
type: "connect",
@@ -212,7 +214,8 @@ function initWebSocket(wsUrl = import.meta.env.VITE_API_WSS) {
heartbeatTimer.value = null
// 手动关闭后不在执行自动连接任务
if (!wsIsClose.value) reConnect(wsUrl);
// ws.value.close();
// if (!wsIsClose.value) reConnect(wsUrl);
})
// 连接发生错误
@@ -237,7 +240,8 @@ function initWebSocket(wsUrl = import.meta.env.VITE_API_WSS) {
heartbeatTimer.value = null
// 手动关闭后不在执行自动连接任务
if (!wsIsClose.value) reConnect(wsUrl);
// ws.value.close();
// if (!wsIsClose.value) reConnect(wsUrl);
})
// 关闭
@@ -264,28 +268,31 @@ function startheartbeat() {
}
// 重连最大次数5次
let reConnectCount = ref(0)
let reConnectTimer = ref(null)
function reConnect(wsUrl) {
if (reConnectTimer.value != null) return
ws.value.reconnect();
reConnectTimer.value = setInterval(() => {
// 自动连接超过5次不在连接需手动出发
// console.log('reConnectCount.value===', reConnectCount.value);
// if (reConnectCount.value >= 100) {
// console.log('重连超过5次不在连接');
// clearInterval(reConnectTimer.value)
// reConnectTimer.value = null
// reConnectCount.value = 0
// wsIsClose.value = true
// ws.value.close()
// } else {
// }
// reConnectCount.value++
// initWebSocket(wsUrl)
ws.value.reconnect();
}, 2000)
}
// let reConnectCount = ref(0)
// let reConnectTimer = ref(null)
// function reConnect(wsUrl) {
// if (reConnectTimer.value != null) return
// console.log('ws.value.readyState', ws.value.readyState);
// console.log('ReconnectingWebSocket.OPEN', ReconnectingWebSocket.OPEN);
// if (ws.value.readyState == ReconnectingWebSocket.OPEN) return
// ws.value.reconnect();
// reConnectTimer.value = setInterval(() => {
// // 自动连接超过5次不在连接,需手动出发
// // console.log('reConnectCount.value===', reConnectCount.value);
// // if (reConnectCount.value >= 100) {
// // console.log('重连超过5次不在连接');
// // clearInterval(reConnectTimer.value)
// // reConnectTimer.value = null
// // reConnectCount.value = 0
// // wsIsClose.value = true
// // ws.value.close()
// // } else {
// // }
// // reConnectCount.value++
// // initWebSocket(wsUrl)
// ws.value.reconnect();
// }, 2000)
// }

View File

@@ -1,14 +1,28 @@
import { defineStore } from "pinia";
import ReconnectingWebSocket from "reconnecting-websocket";
export const useSocket = defineStore({
id: "socket",
state: () => ({
online: false,
online: false, // 是否在线
ws: null,
}),
actions: {
// 登录
// 改变在线状态
changeOnline(state) {
this.online = state;
},
// 初始化
init(wsUrl = import.meta.env.VITE_API_WSS) {
if (this.ws == null) {
this.ws = new ReconnectingWebSocket(
`${wsUrl}/shopId=${store.userInfo.shopId}/clientId=${uuid.value}`,
null,
{
reconnectInterval: 10000,
}
);
}
},
},
});

View File

@@ -191,7 +191,9 @@ const exit = async () => {
let res = await loginlogout({
status: 1
})
useStorage.clear()
// useStorage.clear()
useStorage.del('userInfo')
useStorage.del('token')
ElMessage.success("交班成功");
setTimeout(() => {
router.replace({
@@ -208,7 +210,9 @@ const exit = async () => {
data.printTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
ipcRenderer.send("printerWorkSync", JSON.stringify(data));
// return
useStorage.clear()
// useStorage.clear()
useStorage.del('userInfo')
useStorage.del('token')
ElMessage.success("交班成功");
setTimeout(() => {
router.replace({
@@ -222,7 +226,9 @@ const exit = async () => {
let res = await loginlogout({
status: 1
})
useStorage.clear()
// useStorage.clear()
useStorage.del('userInfo')
useStorage.del('token')
ElMessage.success("交班成功");
setTimeout(() => {
router.replace({