我们在 Signalr .Net Core 中遇到了重新连接问题,重新连接到 signalr-hub 的最佳实践是什么?
以下似乎是有关重新连接的最受尊敬的文章。但似乎已经过时了,不是吗? 将 SignalR 2.0 .NET 客户端重新连接到服务器集线器的最佳实践
执行此“重新连接”的最佳方法是使用
WithAutomaticReconnect
方法。
因此,您可以使用内置的重新连接逻辑,而不是编写自己的重新连接逻辑。
首先,您必须删除当前的重新连接逻辑,并将
.WithAutomaticReconnect()
添加到您的 HubConnectionBuilder
。
现在您有两个选择:
此方法的默认值为
TimeSpan[0, 2000, 10000, 30000, null]
,这意味着每次尝试重新连接失败后,它将等待 X (0, 2, 10, 30) 秒。一旦达到null
,它将停止尝试。
你可以自定义这个数组,但它的末尾总是有一个空值,如果你想让它无限尝试,它就会变得不可靠。 这给我们带来了下一个选择:
IRetryPolicy
表示每次尝试重新连接失败后,HubConnectionBuilder
必须等待多少秒。
此方法无限运行,直到连接恢复。
实现自定义
IRetryPolicy
:
public class RetryPolicyLoop : IRetryPolicy
{
private const int ReconnectionWaitSeconds = 5;
public TimeSpan? NextRetryDelay(RetryContext retryContext)
{
return TimeSpan.FromSeconds(ReconnectionWaitSeconds);
}
}
这就是您的
HubConnectionBuilder
中的样子:
.WithAutomaticReconnect(new RetryPolicyLoop())
目前你必须编写自己的重连逻辑。该文档提供了如何为 Javascript 客户端 和 .NET 客户端 进行简单重新连接的示例。
(您的链接引用的是SignalR的.NET(4.x)客户端/版本,而不是.NET CORE版本。它并没有过时。它们在很多方面都有明显不同,并且彼此不兼容。您必须使用带有 .NET CORE 客户端的 .NET CORE 集线器,您不能将它们与旧版 .NET (4.x) 集线器或客户端混合使用。
根据 2017 年的这个问题(截至本文发布时该问题仍处于开放状态),David Fowler 表示“我们正在考虑在下一个预览版本中将自动重新连接功能添加回 SignalR。”
因此,根据您所在的版本以及此问题所在的位置,您需要跟进该项目。