signalr-no-jquery v0.1.10运行20分钟停止ping 如何修改超时配置
问题根因
你遇到的运行20分钟后停止发送ping请求的问题,是signalr-no-jquery v0.1.10默认的disconnectTimeout参数触发的,该参数默认值为1200000毫秒(即20分钟),如果客户端在该时长内没有收到服务端的任何消息响应,就会判定连接已失效,停止后续所有ping请求发送。
配置方案
该版本完全兼容ASP.NET SignalR 2.x原生JS客户端的参数体系,不需要在start()方法中传入参数,直接在连接实例上修改对应属性即可,所有配置需要在调用start()方法前完成。
修改后的代码示例:
export const createSocketConnection = () => { const URL = process.env.REACT_APP_API_URL; const connection = hubConnection(`${URL}/signalr`, { useDefaultPath: false }); // 配置客户端ping发送间隔:示例为1分钟发一次,单位毫秒,默认值300000(5分钟) connection.pingInterval = 60 * 1000; // 配置断开判定超时:示例为2小时,单位毫秒,默认值1200000(20分钟) connection.disconnectTimeout = 2 * 60 * 60 * 1000; return connection; }; export const createSocketProxy = (connection, hubName) => { return connection.createHubProxy(hubName); }; export const createSocketChannel = (eventName, proxy) => eventChannel((emit) => { const messageHandler = (...data) => { emit(data); }; proxy.on(eventName, messageHandler); return () => { }; }); export const startSocket = (socket) => new Promise((resolve) => { socket.start().done(() => resolve()); }); export const stopSocket = (socket) => new Promise((resolve) => { socket.stop().done(() => resolve()); });
补充说明
- 建议同步调整服务端SignalR的
DisconnectTimeout和KeepAlive配置,保持客户端和服务端的超时规则一致,避免服务端主动断开空闲连接 - 可以添加断开事件监听,触发时执行自动重连逻辑,进一步提升连接稳定性,示例代码如下:
// 在创建连接实例后添加该监听即可 connection.disconnected(() => { // 示例为断开3秒后自动重连,可按需调整逻辑 setTimeout(() => connection.start(), 3000); });
内容的提问来源于stack exchange,提问作者Kas
相关产品推荐
相关产品推荐

