何时会发生signalR重新连接?

时间:2013-01-22 10:05:17

标签: .net signalr signalr-hub reconnect

我已经开始使用SignalR并试图找出Hub Reconnect何时发生。我在网上找不到任何令人满意的解释。有人可以解释何时/为什么会发生重新连接?

1 个答案:

答案 0 :(得分:82)

当客户端脱机然后不久重新获得连接时,就会发生集线器重新连接。 SignalR配置值很大程度上决定了以下示例的时间戳,因此不要逐字记录。

以下是几个涉及重新连接行为的示例及其结果(时间格式m:ss):

当我提到以下内容时,我指的是服务器端Hub方法

  • OnConnected
  • OnDisconnected
  • OnReconnected

<强> 1)
0:00 - 客户端连接到服务器,OnConnected被触发 0:10 - 由于ISP问题,客户端失去连接(并意识到它失去连接)
0:15 - 客户重新获得连接
0:16 - 触发OnReconnected事件

<强> 2)
0:00 - 客户端连接到服务器,OnConnected被触发 0:10 - 由于拔出以太网电缆,客户端失去连接(未意识到它已断开)
0:15 - 客户重新获得连接
这里可能发生两件事
答:0:16 - 没有任何反应,客户继续其先前的连接
B:0:~45 - 客户端实现断开连接*
B:0:46-客户端转换到重新连接状态
B:0:47 - 客户端成功重新连接并触发OnReconnected事件。

第3)
0:00 - 客户端连接到服务器,OnConnected被触发 0:10 - 由于拔出以太网电缆,客户端失去连接(未意识到它已断开)
0:~45 - 客户端实现断开连接*
0:46 - 客户端转换到重新连接状态
1:15 - 服务器确定客户端已经消失了太长时间然后忘记它,排队一个“断开连接”命令,让客户端接收它,如果它稍后重新连接。 ***
1:15 - OnDisconnected被触发 1:16 - 客户重新获得连接 1:17 - 客户端进行“软”重新连接(不触发OnReconnected)
1:18 - 客户端检索“disconnect”命令
1:19 - 客户端调用“停止”并进行软断开(不触发OnDisconnected)

<强> 4)
0:00 - 客户端连接到服务器,OnConnected被触发 0:10 - 由于拔出以太网电缆,客户端失去连接(未意识到它已断开)
0:~45 - 客户端实现断开连接*
0:46 - 客户端转换到重新连接状态
1:15 - 服务器确定客户端已经消失了太长时间然后忘记它,排队一个“断开连接”命令,让客户端接收它,如果它稍后重新连接。 ***
1:15 - OnDisconnected被触发 1:30 - 客户停止尝试重新连接(尝试时间过长)**
1:30 - 客户端转换为断开状态

*由于客户端保持活跃状态​​检查:用于确定客户端由于缺少保持活动而何时处于脱机状态。不用于长轮询运输

**由于客户端断开连接超时:用于确定客户端何时重新连接太长时间并且服务器在此期间忘记了客户端的可能性

***由于服务器断开连接超时:用于确定何时应该忘记客户端。一旦连接在服务器上被标记为死亡,它就会开始累积。最终,服务器为客户端的主题排队断开命令,该命令告诉客户端(如果它重新连接)它需要启动新连接。当主题被清理时,该命令将从服务器中消失。

希望这有帮助!