何时会发生signalR重新连接?

gsh*_*arp 54 .net reconnect signalr signalr-hub

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

N. *_*len 84

当客户端脱机然后不久重新获得连接时,就会发生集线器重新连接.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 - 客户端重新连接
这里可能发生两件事情
A: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 - 客户端转换为断开状态

*由于客户端保持活动检查:用于确定客户端由于缺乏保持活动而何时脱机.不用于长轮询运输

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

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

希望这可以帮助!

  • 优秀答案!SignalR的家伙应该把它放在他们的wiki中:-)非常感谢. (7认同)
  • 当客户端重新连接时,Context.ConnectionID会发生什么,它是保持不变还是更改?此外,当singalR客户端"重新连接"到服务器时,在该过程中,OnDisconnected是否曾被调用?换句话说,"重新连接"是指(OnDisconnected + OnConnected)? (4认同)
  • 连接ID将保持不变.重新连接永远不会被称为OnDisconnected.因此,您可以从OnConnected - > OnReconnected和OnConnected - > OnDisconnected转到但是您永远不能从OnDisconnected转发 - > OnReconnected. (3认同)
  • 一个优秀的官方解释也是[这里](http://www.asp.net/signalr/overview/signalr-20/hubs-api/handling-connection-lifetime-events). (2认同)