SignalR 正在重新连接 .net 3.1 核心中的每个视图秒

Posted

技术标签:

【中文标题】SignalR 正在重新连接 .net 3.1 核心中的每个视图秒【英文标题】:SignalR is reconnecting every view seconds in .net 3.1 core 【发布时间】:2021-02-07 17:54:31 【问题描述】:

我在 kubernetes 集群中使用 .net 3.1 下的 SignalR。连接到集群时,我的 SignalR 客户端每 1-5 秒重新连接一次。我目前的设置:

.net 3.1 client --> Ambassador-Api-Gateway -> K8S -> Docker-Container

在本地启动所有内容时,我对许多重新连接都没有问题。客户端使用以下设置连接到服务:

Connection = new HubConnectionBuilder()
    .WithUrl($"clientBase.Url/ClientBase.ApiVersion/api-api/hubName", options =>
    
        options.AccessTokenProvider = () => Task.FromResult(clientBase.User.Token);
    )
    .WithAutomaticReconnect()
    .Build();

Connection.ServerTimeout = TimeSpan.FromSeconds(30);
Connection.KeepAliveInterval = TimeSpan.FromMilliseconds(100);

我尝试减少 KeepAliveInterval 并增加 ServerTimeout 但这没有帮助。

【问题讨论】:

客户端日志中是否有任何错误?您的 api 网关或 K8S 中可能需要一些配置来允许 websockets,或允许长期连接。 @Brennan 感谢您的回答,我看不到任何错误,并且入口/网关配置为使用网络套接字:use_websocket: true 【参考方案1】:

基于此link

你可以跳过谈判部分,如

var connection = new HubConnectionBuilder()
.WithUrl("https://example.com/myHub", options => 
    options.SkipNegotiation = true;
    options.Transport = SignalR.HttpTransportType.WebSockets;
)
.Build();

此外,为了向所有客户端广播但连接到不同的 pod,您可以使用 Backplane 使用

services.AddSignalR().AddStackExchangeRedis("<connection_string>");

【讨论】:

感谢您的回答,在设置这些选项时,我收到:SignalR The 'User-Agent' header must be modified using the appropriate property or method。我去看看。

以上是关于SignalR 正在重新连接 .net 3.1 核心中的每个视图秒的主要内容,如果未能解决你的问题,请参考以下文章

C# SignalR 异常 - 在收到调用结果之前连接开始重新连接

C#SignalR异常 - 在收到调用结果之前,连接开始重新连接

选项卡背景化后每隔几分钟 SignalR 断开连接

WebRTC:ICE、STUN 和 TURN,但我不能只使用我的 SignalR.NET 连接吗?

SignalR .Net Core 多连接

HTTP 和 SignalR