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

Posted

技术标签:

【中文标题】选项卡背景化后每隔几分钟 SignalR 断开连接【英文标题】:SignalR disconnecting every few minutes after the tab is backgrounded 【发布时间】:2021-12-08 06:15:17 【问题描述】:

我正在使用 SignalR 在 Vue.js 前端和 dotnet 后端之间进行通信。

当您在(看似随机的)一段时间后将前端选项卡置于后台时,连接会断开。因为我使用的是自动重新连接,所以套接字会重新连接,但是直到选项卡重新聚焦之前,套接字将继续每隔几分钟断开连接,将其置于重新连接循环中。

一些事情:

似乎在除 Firefox 之外的所有浏览器中都会发生 在本地同时运行前端和后端时,没有问题 在本地运行前端但远程运行后端确实会导致问题 两个应用程序都没有在 IIS 上运行 Kestrel 超时设置为一小时(以防万一) 导致重新连接开始循环的初始断开连接不会在一致的时间发生,只是在 5-10 分钟左右 两端均未抛出错误

客户端代码非常基础:

 this.connection = new HubConnectionBuilder()
        .withUrl(this.url)
        .withAutomaticReconnect()
        .build()

服务器端代码同样基本:

 public override async Task OnConnectedAsync()
    
        //Create client code here

        await base.OnConnectedAsync();
    

    public override async Task OnDisconnectedAsync(Exception exception)
    
        if(exception != null) _logger.LogErrorToFile(exception.Message);
        _logger.LogInformationToFile($"Client with id: GetConnectionId() disconnected.GetUsername()");
        await base.OnDisconnectedAsync(exception);
    

【问题讨论】:

这可能对github.com/SignalR/SignalR/issues/4536有帮助 Chrome 今年早些时候进行了更新,当连接在大约 5 分钟后没有聚焦时会停止连接。 Nirbhay 评论的问题/修复实际上是针对 ASP.NET 版本 (2.4.2) 并且与 .NET CORE 不兼容。这是针对 .NET CORE 提出的问题 - github.com/dotnet/aspnetcore/issues/31079 @FrankM 那个帖子正是我需要的,谢谢 @Coffee 很高兴能帮到你。我将发布作为答案。如果您有时间请标记,以防其他人寻找相同的内容。 @Coffee 请标记 Frank 的答案以显示您的问题已解决 【参考方案1】:

Chrome 在今年早些时候进行了更新,当连接在大约 5 分钟后没有处于焦点时会停止连接。 Nirbhay 评论的问题/修复实际上是针对 ASP.NET 版本 (2.4.2) 的,并且与 .NET CORE 不兼容。这是针对 .NET CORE 提出的问题 - github.com/dotnet/aspnetcore/issues/31079

【讨论】:

以上是关于选项卡背景化后每隔几分钟 SignalR 断开连接的主要内容,如果未能解决你的问题,请参考以下文章

怎么让windows计划任务每隔几分钟运行一次?

XMPP 与 Firebase 云消息传递的连接断开

如何防止从运行时断开连接(Google Colab)

plsql 为啥隔几分钟再执行sql的时候就会未响应,有啥办法可以解决不?

每隔几分钟轮询一次 gps 强度

SignalR,有限的唯一连接(打开的选项卡)IIS 8,Windows 8