gpt4 book ai didi

asp.net-core - .Net Core SignalR 服务器到服务器重新连接

转载 作者:行者123 更新时间:2023-12-04 15:04:09 25 4
gpt4 key购买 nike

我正在尝试了解有关在 Web 套接字服务出现故障时将 Websocket 连接服务器重新连接到服务器的更多信息。我已经做了很多环顾文档和其他问题(主要是查找客户端到服务器),但无法决定我要实现的内容。

所以目标是当服务 A 启动时,我让微服务 A 连接到微服务 B 上的 Web 套接字。一切正常,但是当我关闭服务 B 时,当我重新启动 B 时,服务 A 中的 HubConnection 状态总是断开连接。因此,例如使用 Microsoft.AspNetCore.SignalR.Client 1.1.0

    public class MessageHubProxy : IMessageHubProxy 
{
private readonly HubConnection _hubConnection;

public MessageHubProxy()
{
_hubConnection = new HubConnectionBuilder().WithUrl("http://localhost:54994/messageHub").Build();

InitiateConenction().Wait();
}

private async Task InitiateConenction()
{
await _hubConnection.StartAsync();
}

public void AddMessage(string message)
{
_hubConnection.InvokeAsync("addMessage", post);
}
}

当我看 _hubConnection在我停止并启动服务 B 并调用 AddMessage 之后的 AddMessage 中。我在 HubConnection 上看到以下属性:
HandshakeTimeout: 15 seconds,
KeepAliveInterval: 15 seconds,
ServerTimeout: 30 seconds,
State: Disconnected

从我读到的内容来看,也许我仍然误解了 HandshakeTimeout、KeepAliveInterval 和 ServerTimeout 的使用。也许我可以使用其中之一让服务 A 在服务 B 启动并运行后重新连接?或者我看到 HubConnection 类型有一个 .On<> ,也许我需要捕获断开连接并手动调用重试?非常感谢我如何处理服务器到服务器重新连接的任何信息!

最佳答案

当您的连接失败时,您可以使用 Polly。
https://github.com/App-vNext/Polly

public class MessageHubProxy : IMessageHubProxy 
{
private readonly HubConnection _hubConnection;

public MessageHubProxy()
{
_hubConnection = new HubConnectionBuilder().WithUrl("http://localhost:54994/messageHub").Build();

Policy
.Handle<Exception>()
.WaitAndRetry(5, r => TimeSpan.FromSeconds(5), (ex, ts) => { Log.Error("Error connecting to DB. Retrying in 5 sec."); })
.Execute(() => InitiateConenction());
}

private async Task InitiateConenction()
{
await _hubConnection.StartAsync();
}

public void AddMessage(string message)
{
_hubConnection.InvokeAsync("addMessage", post);
}
}

关于asp.net-core - .Net Core SignalR 服务器到服务器重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57470468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com