You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:45:03