import * as SignalR from '@microsoft/signalr'; import { ElNotification } from 'element-plus'; import { getToken } from '/@/utils/axios-utils'; // 初始化SignalR对象 const connection = new SignalR.HubConnectionBuilder() .configureLogging(SignalR.LogLevel.Information) .withUrl(`${window.__env__.VITE_API_URL}/hubs/onlineUser?token=${getToken()}`, { transport: SignalR.HttpTransportType.WebSockets, skipNegotiation: true }) .withAutomaticReconnect({ nextRetryDelayInMilliseconds: () => { return 5000; // 每5秒重连一次 }, }) .build(); connection.keepAliveIntervalInMilliseconds = 15 * 1000; // 心跳检测15s connection.serverTimeoutInMilliseconds = 30 * 60 * 1000; // 超时时间30m // 启动连接 connection.start().then(() => { console.log('启动连接'); }); // 断开连接 connection.onclose(async () => { console.log('断开连接'); }); // 重连中 connection.onreconnecting(() => { ElNotification({ title: '提示', message: '服务器已断线...', type: 'error', position: 'bottom-right', }); }); // 重连成功 connection.onreconnected(() => { console.log('重连成功'); }); connection.on('OnlineUserList', () => {}); export { connection as signalR };