From 08d8ca577d1643c405eda3e2700418e6625afa45 Mon Sep 17 00:00:00 2001 From: Megghy Date: Sat, 26 Apr 2025 06:04:09 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=20SignalR=20?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E7=AE=A1=E7=90=86=EF=BC=8C=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E5=92=8C=E9=87=8D=E8=BF=9E?= =?UTF-8?q?=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 useWebFetcher 中添加 SignalR 连接停止和重置逻辑。 - 修改连接关闭时的错误日志,增加重连提示。 - 移除不必要的状态标记,简化重连流程。 --- src/store/useWebFetcher.ts | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/src/store/useWebFetcher.ts b/src/store/useWebFetcher.ts index fce61e6..9268270 100644 --- a/src/store/useWebFetcher.ts +++ b/src/store/useWebFetcher.ts @@ -216,7 +216,9 @@ export const useWebFetcher = defineStore('WebFetcher', () => { console.log(prefix.value + "SignalR 已连接或正在连接"); return true; } - + signalRClient.value?.stop(); + signalRClient.value = undefined; + signalRConnectionId.value = undefined; console.log(prefix.value + '正在连接到 vtsuru 服务器...'); const connection = new signalR.HubConnectionBuilder() .withUrl(BASE_HUB_URL + 'web-fetcher?token=' + (route.query.token ?? account.value.token), { // 使用 account.token @@ -250,11 +252,19 @@ export const useWebFetcher = defineStore('WebFetcher', () => { connection.onclose(async (error) => { // 只有在不是由 Stop() 或服务器明确要求断开时才记录错误并尝试独立重连(虽然 withAutomaticReconnect 应该处理) if (state.value !== 'disconnected' && !disconnectedByServer) { - console.error(prefix.value + `与服务器连接关闭: ${error?.message || '未知原因'}. 自动重连将处理.`); - state.value = 'connecting'; // 标记为连接中,等待自动重连 + console.error(prefix.value + `与服务器连接关闭: ${error?.message || '未知原因'}. 30秒后将自动重启`); + //state.value = 'connecting'; // 标记为连接中,等待自动重连 + //signalRConnectionId.value = undefined; + //await connection.start(); + // 停止 SignalR 连接 + signalRClient.value?.stop(); + signalRClient.value = undefined; signalRConnectionId.value = undefined; - await connection.start(); - } else if (disconnectedByServer) { + setTimeout(() => { + console.log(prefix.value + '尝试重启...'); + connectSignalR(); // 30秒后尝试重启 + }, 30 * 1000); // 30秒后自动重启 + } else if (disconnectedByServer) { console.log(prefix.value + `连接已被服务器关闭.`); //Stop(); // 服务器要求断开,则彻底停止 } else { @@ -265,12 +275,7 @@ export const useWebFetcher = defineStore('WebFetcher', () => { connection.on('Disconnect', (reason: unknown) => { console.log(prefix.value + '被服务器断开连接: ' + reason); disconnectedByServer = true; // 标记是服务器主动断开 - window.$message.error(`被服务器要求断开连接: ${reason}, 为保证可用性, 30秒后将自动重启`); - //Stop(); // 服务器要求断开,调用 Stop 清理所有资源 - setTimeout(() => { - console.log(prefix.value + '尝试重启...'); - connectSignalR(); // 30秒后尝试重启 - }, 30 * 1000); // 30秒后自动重启 + window.$message.error(`被服务器要求断开连接: ${reason}`); }); connection.on('Request', async (url: string, method: string, body: string, useCookie: boolean) => onRequest(url, method, body, useCookie)); connection.on('Notification', (type: string, data: any) => { onReceivedNotification(type, data); });