识别来自" ConnectionSlow"的SignalR转换状态到正常状态

时间:2014-10-23 14:26:00

标签: c# signalr

官方文档中的

This document是了解SignalR生命事件和状态的良好开端。但似乎缺少一些东西:如何确定connectionSlow切换回正常状态的时刻?

我希望在ConnectionSlow事件被触发时向用户显示一条消息。但我不知道何时隐藏此消息:

  • 如果reconnecting事件被触发,没问题:我只需要等待Reconnected事件或Closed事件,然后隐藏消息或显示致命错误。< / LI>
  • 如果reconnecting事件未被触发,可能是因为连接被返回到&#34;健康&#34;状态而不必重新连接==&gt;我应该用什么来识别这个?

我开始使用HubConnection类及其StateChanged事件,但ConnectionState枚举没有ConnectionSlow状态。

1 个答案:

答案 0 :(得分:3)

正如您所注意到的,ConnectionSlow不是一个州,它只是一个事件,表明SignalR客户端已经错过了预期的保持活动消息。

默认情况下,如果客户端在触发ConnectionSlow后约7秒内未收到任何保持活动,则它将开始尝试重新连接。因此,如果客户端在ConnectionSlow触发后的10秒内没有开始重新连接,您可以安全地假设在ConnectionSlow触发后SignalR收到了保持活动状态。

这并不一定意味着连接不再缓慢,但它确实意味着在再次触发ConnectionSlow之前,SignalR将等待另外约13秒而不接收另一个保持活动状态。这意味着在SignalR自动尝试重新连接之前,它总共需要大约20秒而没有保持活动状态。使用SignalR的默认10秒保持活动间隔来计算所有这些数字。

SignalR's documentation on the Understanding and Handling Connection Lifetime Events更深入。