优化长连接
This commit is contained in:
75
src/App.vue
75
src/App.vue
@@ -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)
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
);
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user