From 3f143d65365a6e1f3badee4242d1863f000cbfb5 Mon Sep 17 00:00:00 2001 From: WangJunZzz <510423039@qq.com> Date: Sun, 17 Jul 2022 12:10:17 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=91=20=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=E5=85=88=E5=90=AF=E5=8A=A8=EF=BC=8CSignalR=E4=B8=8D=E4=BC=9A?= =?UTF-8?q?=E5=B0=9D=E8=AF=95=E9=87=8D=E8=BF=9E=E3=80=82#49?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vben28/src/hooks/web/useSignalR.ts | 84 ++++++++++++++++-------------- 1 file changed, 45 insertions(+), 39 deletions(-) diff --git a/vben28/src/hooks/web/useSignalR.ts b/vben28/src/hooks/web/useSignalR.ts index d80e258f..fc6bbea2 100644 --- a/vben28/src/hooks/web/useSignalR.ts +++ b/vben28/src/hooks/web/useSignalR.ts @@ -1,62 +1,68 @@ import * as signalR from '@microsoft/signalr'; import { useMessage } from '/@/hooks/web/useMessage'; import { useUserStoreWithOut } from '/@/store/modules/user'; -let connection; +let connection:signalR.HubConnection; export function useSignalR() { + /** * 开始连接SignalR */ - function startConnect(): void { - connection = connectionsignalR(); - //接收普通文本消息 - connection.on('ReceiveTextMessageAsync', ReceiveTextMessageHandlerAsync); - //接收广播消息 - connection.on('ReceiveBroadCastMessageAsync', ReceiveBroadCastMessageHandlerAsync); - //开始连接 - connection.start(); + async function startConnect() { + try { + connectionsignalR(); + await connection.start(); + } catch (err) { + console.log(err); + setTimeout(() => startConnect(), 5000); + } } + /** * 关闭SignalR连接 */ - function closeConnect(): void { + function closeConnect(): void {8 if (connection) { connection.stop(); } } - /** - * 连接signalr - */ - function connectionsignalR() { + async function connectionsignalR(){ const userStore = useUserStoreWithOut(); const token = userStore.getToken; - const url = (import.meta.env.VITE_WEBSOCKE_URL as string) + '/signalr/notification'; connection = new signalR.HubConnectionBuilder() - .withUrl(url, { - accessTokenFactory: () => token, - skipNegotiation: true, - transport: signalR.HttpTransportType.WebSockets, - }) - .withAutomaticReconnect({ - nextRetryDelayInMilliseconds: (retryContext) => { - //重连规则:重连次数<300:间隔1s;重试次数<3000:间隔3s;重试次数>3000:间隔30s - let count = retryContext.previousRetryCount / 300; - if (count < 1) { - //重试次数<300,间隔1s - return 1000; - } else if (count < 10) { - //重试次数>300:间隔5s - return 1000 * 5; - } //重试次数>3000:间隔30s - else { - return 1000 * 30; - } - }, - }) - .configureLogging(signalR.LogLevel.Information) - .build(); - return connection; + .withUrl(url, { + accessTokenFactory: () => token, + skipNegotiation: true, + transport: signalR.HttpTransportType.WebSockets, + }) + .withAutomaticReconnect({ + nextRetryDelayInMilliseconds: retryContext => { + + //重连规则:重连次数<300:间隔1s;重试次数<3000:间隔3s;重试次数>3000:间隔30s + let count = retryContext.previousRetryCount / 300; + if (count < 1)//重试次数<300,间隔1s + { + return 1000; + } + else if (count < 10) //重试次数>300:间隔5s + { + return 1000 * 5; + + } + else //重试次数>3000:间隔30s + { + return 1000 * 30; + } + } + }) + .configureLogging(signalR.LogLevel.Debug) + .build(); + + //接收普通文本消息 + connection.on('ReceiveTextMessageAsync', ReceiveTextMessageHandlerAsync); + //接收广播消息 + connection.on('ReceiveBroadCastMessageAsync', ReceiveBroadCastMessageHandlerAsync); } /**