SignalR奇怪的重新连接模式

时间:2015-08-28 10:52:49

标签: .net asp.net-mvc signalr

我正在使用SignalR在非常具体的网络条件下(一个疯狂的代理)。所以套接字根本不起作用,我必须使用长轮询。当我刷新页面时,它似乎工作了一段时间,但第一次Disconnect发生了。我正在尝试自动重新连接断开连接的事件和以下模式:

  1. 加载页面后,集线器会在大约110秒(默认超时)
  2. 时断开连接
  3. 首次断开连接后,需要3个Disconnected事件才能重新启动集线器(因此仅在第4次尝试时才连接)
  4. 之后它会在第一次尝试时重新连接,但在大约10-15秒(不是110秒)后断开连接。因此看起来保持活动超时在某种程度上是在这里被调用的(虽然它不是第一次尝试)。
  5. 这种行为似乎很奇怪。我能做些什么来改善它吗?

2 个答案:

答案 0 :(得分:2)

假设Understanding and Handling Connection Lifetime Events in SignalR中提供的提示,您可以根据网络问题采用良好的解决方案来处理连接生命周期。此外,在SignalR的问题中,我找到了适用于长轮询的以下解决方案。

您可以在KeepAlive上设置ConfigurationManager属性,SignalR将在指定的时间间隔内发送一个空的数据帧(基于传输)以保持连接处于活动状态(查看{{3 }})。目前的超时机制使得流媒体协议没有区别。

答案 1 :(得分:2)

使用ConnectionStatusStream。当客户端SignalR集线器代理事件被引发时,此流OnNexts。所以我们看到像连接,连接,ConnectionSlow,重新连接,重新连接,关闭,未初始化的东西。所有这些都作为SignalR集线器代理上的事件开始,并使用众多RX工厂中的一个转入IObservable流。在这种情况下IObservable.FromEvent。

无论如何,这里是我们用来在应用程序底部状态栏中显示信息的整体ConnectivityStatusViewModel。

参考:

data('active-video')