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

如何配置SignalR .NET客户端的Ping间隔

解决SignalR .NET客户端Ping间隔配置问题

问题分析

你之前配置的是底层WebSocket的TCP心跳间隔,而非SignalR应用层的Ping机制,因此无法改变客户端15秒发送Ping的行为。SignalR客户端的Ping由自身的KeepAliveInterval参数控制,需与服务端配置匹配才能生效。

正确配置步骤

1. 确认服务端配置生效

先确保服务端的Hub配置已正确绑定到SignalR服务中:

services.AddSignalR()
    .AddHubOptions<MyHub>(options =>
    {
        options.ClientTimeoutInterval = TimeSpan.FromSeconds(120);
        options.KeepAliveInterval = TimeSpan.FromSeconds(60);
    });

2. 客户端修改SignalR应用层Ping配置

在HubConnectionBuilder中通过ConfigureHubConnection设置SignalR层面的KeepAliveInterval,同时强制使用WebSocket传输(匹配服务端仅支持WS的限制):

var hubConnection = new HubConnectionBuilder()
    .WithUrl("signalrendpointaddress", options =>
    {
        // 强制使用WebSocket传输,避免客户端尝试其他不支持的传输方式
        options.Transports = HttpTransportType.WebSockets;
        options.CloseTimeout = TimeSpan.FromSeconds(120);
    })
    .ConfigureHubConnection(options =>
    {
        // 设置客户端应用层Ping间隔为60秒
        options.KeepAliveInterval = TimeSpan.FromSeconds(60);
        // 客户端超时需大于等于服务端的ClientTimeoutInterval
        options.ServerTimeout = TimeSpan.FromSeconds(120);
    })
    .Build();

关键说明

  • 底层WebSocket的KeepAliveInterval是TCP层面的心跳机制,和SignalR应用层Ping相互独立,无需修改除非有特殊网络环境需求。
  • 客户端KeepAliveInterval建议与服务端KeepAliveInterval保持一致,避免因配置不匹配导致的连接断开。

内容的提问来源于stack exchange,提问作者john_9559

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:25:46