【问题标题】:SignalR Client DisconectSignalR 客户端断开连接
【发布时间】:2021-12-05 15:52:13
【问题描述】:

如果我说关闭笔记本电脑的盖子几个小时,并且我正在使用 SignalR 运行应用程序,那么服务器集线器会尝试向该 connectionId 发送消息,会发生什么情况,我的 SendMessage 会出现异常吗?当我打开笔记本电脑盖时,我的 connectionId 是否仍然有效且值相同?

【问题讨论】:

    标签: signalr signalr-hub signalr.client


    【解决方案1】:

    除了 eglease 的回答之外,您运行的版本和浏览器也很重要。如果您使用 ASP.NET SignalR 客户端 2.4.1 或更早版本并使用 Chrome 作为浏览器,您将有 5 分钟的时间窗口在 Chrome 终止您之前,因为连接没有被积极使用。如果您刚刚打开另一个选项卡并且您的客户位于未聚焦的选项卡上,也会发生同样的情况。

    这已在 4 月份的 2.4.2 版本中修复,以防止出现此问题。

    【讨论】:

      【解决方案2】:

      这取决于您合上盖子时笔记本电脑的情况。

      如果您禁用了演示模式或睡眠,则不会发生任何事情。客户端将继续像以前一样工作并接收消息。 ConnectionID 不会改变。

      如果您的笔记本电脑进入睡眠状态和/或禁用网络连接或 SignalR 客户端停止运行,服务器将在超时后断开连接并尝试重新连接。除非您有自己的逻辑来监视收到的消息以及需要重新发送的消息,否则客户端将不会收到它错过的任何消息。应用程序级别应该没有异常,但是如果您查看 SignalR 跟踪,库本身就会有异常。这是正常的。

      ConnectionID 取决于客户回来需要多长时间。如果OnReconnect() 有效,它将在短时间内保持不变。如果断开连接时间较长并且触发了OnDisconnect(),则ConnectionID 将有所不同,因为客户端需要手动重新连接(新连接)。

      注意: SignalR for ASP.NET 确实有一些重新发送和缓冲逻辑,但它没有太多缓冲并且不能很好地工作。出于这个原因,它在 SignalR for .NET Core 中被删除。

      如果您需要重新发送功能,请查看NATS.io

      TLDR;如果断开连接时间足够长,OnDisconnect() 可以在服务器上触发,则新的CustomerID 也不例外。

      【讨论】:

        猜你喜欢
        • 2012-04-05
        • 1970-01-01
        • 1970-01-01
        • 2020-10-18
        • 1970-01-01
        • 1970-01-01
        • 2010-11-01
        相关资源
        最近更新 更多