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异常 - 在收到调用结果之前,连接开始重新连接