gpt4 book ai didi

c# - 将 SignalR 2.0 .NET 客户端重新连接到服务器集线器的最佳实践

转载 作者:IT王子 更新时间:2023-10-29 03:40:48 25 4
gpt4 key购买 nike

我在需要处理各种类型的断开连接的移动应用程序中将 SignalR 2.0 与 .NET 客户端结合使用。有时 SignalR 客户端会自动重新连接 - 有时必须通过再次调用 HubConnection.Start() 直接重新连接。

由于 SignalR 有时会神奇地自动重新连接,我想知道我是否缺少功能或配置设置?

设置自动重新连接的客户端的最佳方法是什么?


我见过处理 Closed() 事件然后在 n 秒后连接的 javascript 示例。有什么推荐的方法吗?

我读过 documentation以及几篇关于 SignalR 连接生命周期的文章,但我仍然不清楚如何处理客户端重新连接。

最佳答案

我终于明白了。这是自开始这个问题以来我学到的东西:

背景:我们正在使用 Xamarin/Monotouch 和 .NET SignalR 2.0.3 客户端构建一个 iOS 应用程序。我们使用默认的 SignalR 协议(protocol)——它似乎使用 SSE 而不是网络套接字。我不确定是否可以将网络套接字与 Xamarin/Monotouch 一起使用。一切都使用 Azure 网站托管。

我们需要该应用程序快速重新连接到我们的 SignalR 服务器,但我们一直遇到连接无法自行重新连接的问题 - 或者重新连接只用了 30 秒(由于底层协议(protocol)超时)。

我们最终测试了三种场景:

场景 A - 第一次加载应用程序时连接。从第一天起就完美无缺。即使通过 3G 移动连接,连接也能在不到 0.25 秒内完成。 (假设 radio 已经打开)

场景 B - 在应用空闲/关闭 30 秒后重新连接到 SignalR 服务器。在这种情况下,SignalR 客户端最终将自行重新连接到服务器,无需任何特殊工作 -但它似乎在尝试重新连接之前等待整整 30 秒。 (对于我们的应用来说太慢了)

在这 30 秒的等待期间,我们尝试调用 HubConnection.Start() 但没有任何效果。调用 HubConnection.Stop() 也需要 30 秒。我找到了 a related bug on the SignalR site that appears to be resolved , 但我们在 v2.0.3 中仍然遇到同样的问题。

场景 C - 在应用空闲/关闭 120 秒或更长时间后重新连接到 SignalR 服务器。在此场景中,SignalR 传输协议(protocol)已经超时,因此客户端永远不会自动重新连接。这解释了为什么客户端有时但不总是自己重新连接。好消息是,调用 HubConnection.Start() 几乎可以立即像场景 A 一样工作。

所以我花了一段时间才意识到,根据应用程序关闭时间是 30 秒还是超过 120 秒,重新连接条件是不同的。尽管 SignalR 跟踪日志阐明了底层协议(protocol)正在发生的事情,但我不相信有一种方法可以在代码中处理传输级别事件。 (Closed() 事件在场景 B 中 30 秒后触发,在场景 C 中立即触发;State 属性在这些重新连接等待期间显示“已连接”;没有其他相关事件或方法)

解决方案:解决方案很明显。我们不是在等待 SignalR 施展它的重新连接魔法。相反,当应用程序被激活或手机的网络连接恢复时,我们只是清理事件并取消引用 HubConnection(无法处理它,因为它需要 30 秒,希望垃圾收集会处理它) 并创建一个新实例。现在一切都很好。出于某种原因,我认为我们应该重用持久连接并重新连接,而不是仅仅创建一个新实例。

关于c# - 将 SignalR 2.0 .NET 客户端重新连接到服务器集线器的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23375043/

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