From ecd8f4c7a1370e7089521b8471f8b8c509f2d5d6 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Mon, 5 Feb 2024 18:36:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20ws=E6=B6=88=E6=81=AF=E9=98=9F=E5=88=97?= =?UTF-8?q?=E5=BB=B6=E8=BF=9F=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/views/dashboard/overview/hooks/useWS.ts | 36 +++++++++++++-------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index e816736e..8a856e67 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "js-base64": "^3.7.5", "js-cookie": "^3.0.5", "nprogress": "^0.2.0", + "p-queue": "^8.0.1", "pinia": "^2.1.7", "vue": "~3.3.13", "vue-codemirror": "^6.1.1", diff --git a/src/views/dashboard/overview/hooks/useWS.ts b/src/views/dashboard/overview/hooks/useWS.ts index 1b0c2842..a6b92014 100644 --- a/src/views/dashboard/overview/hooks/useWS.ts +++ b/src/views/dashboard/overview/hooks/useWS.ts @@ -10,10 +10,12 @@ import { } from './useUserActivity'; import { upfTotalFlow, upfTFParse } from './useUPFTotalFlow'; import { neStateParse } from './useTopology'; +import PQueue from 'p-queue'; /**websocket连接 */ export default function useWS() { const ws = new WS(); + const queue = new PQueue({ concurrency: 1, autoStart: true }); /**发消息 */ function wsSend(data: Record) { @@ -103,25 +105,31 @@ export default function useWS() { // ueEvent UE会话事件 case '1010': if (data.data) { - const v = ueEventParse(data.data); - if (v) { - eventData.value.unshift(v); - eventTotal.value += 1; - eventId.value = v.eId; - eventData.value.pop(); - } + queue.add(async () => { + const v = ueEventParse(data.data); + if (v) { + eventData.value.unshift(v); + eventTotal.value += 1; + eventId.value = v.eId; + await new Promise(resolve => setTimeout(resolve, 800)); + eventData.value.pop(); + } + }); } break; // cdrEvent CDR会话事件 case '1005': if (data.data) { - const v = cdrEventParse(data.data); - if (v) { - eventData.value.unshift(v); - eventTotal.value += 1; - eventId.value = v.eId; - eventData.value.pop(); - } + queue.add(async () => { + const v = cdrEventParse(data.data); + if (v) { + eventData.value.unshift(v); + eventTotal.value += 1; + eventId.value = v.eId; + await new Promise(resolve => setTimeout(resolve, 800)); + eventData.value.pop(); + } + }); } break; }