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; }