信号器重试逻辑 .Net Core

Abh*_*eet 6 signalr .net-core asp.net-core-signalr

我们在 Signalr .Net Core 中遇到了重新连接问题,重新连接到 signalr-hub 的最佳实践是什么?

以下似乎是有关重新连接的最受尊敬的文章。但似乎已经过时了,不是吗? 将 SignalR 2.0 .NET 客户端重新连接到服务器集线器的最佳实践

Pho*_*rro 12

执行此“重新连接”的最佳方法是使用该WithAutomaticReconnect方法。

因此,您可以使用内置的重新连接逻辑,而不是编写自己的重新连接逻辑。

首先,您必须删除当前的重新连接逻辑,并将其添加.WithAutomaticReconnect()到您的HubConnectionBuilder.

现在你有两个选择:

默认行为:

此方法的默认值为TimeSpan[0, 2000, 10000, 30000, null],这意味着每次尝试重新连接失败后,它将等待 X (0, 2, 10, 30) 秒。一旦达到null,它将停止尝试。

您可以自定义这个数组,但它的末尾总是有一个空值,这使得如果您希望它无限尝试,它会变得不可靠。这给我们带来了下一个选择:

自定义IRetryPolicy

An指示每次尝试重新连接失败后必须等待IRetryPolicy多少秒。HubConnectionBuilder

此方法无限运行,直到连接恢复。

要实现自定义IRetryPolicy

public class RetryPolicyLoop : IRetryPolicy
{
    private const int ReconnectionWaitSeconds = 5;
    
    public TimeSpan? NextRetryDelay(RetryContext retryContext)
    {
        return TimeSpan.FromSeconds(ReconnectionWaitSeconds);
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是它在你的中的样子HubConnectionBuilder

.WithAutomaticReconnect(new RetryPolicyLoop())
Run Code Online (Sandbox Code Playgroud)


Fra*_*k M 0

(您的链接引用的是 SignalR 的 .NET (4.x) 客户端/版本,而不是 .NET CORE 版本。它并没有过时。它们在许多方面明显不同,并且彼此不兼容。您必须使用.NET CORE 集线器与 .NET CORE 客户端,您不能将它们与旧版 .NET (4.x) 集线器或客户端混合使用。

根据 2017 年的这个问题(截至本文发布时该问题仍处于开放状态),David Fowler 表示“我们正在考虑在下一个预览版本中将自动重新连接功能添加回 SignalR。”

因此,根据您所在的版本以及此问题所在的位置,您需要跟进该项目。

https://github.com/aspnet/AspNetCore/issues/5282