【问题标题】:When does a reconnect in signalR occur?signalR 中的重新连接何时发生?
【发布时间】:2013-01-05 12:39:39
【问题描述】:

我已开始使用 SignalR,并试图确定何时发生集线器重新连接。我在网上没有找到任何令人满意的解释。有人可以解释何时/为什么会发生重新连接吗?

【问题讨论】:

  • 主机突然宕机是什么行为?连接到主机的所有客户端都不会收到任何消息。你如何解决或抓住它?
  • 嗨@LeMoustique 我相信这值得在SO中单独提出一个问题。

标签: .net signalr signalr-hub reconnect


【解决方案1】:

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

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

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

  • 在线连接
  • 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 - 客户端检索“断开连接”命令
1:19 - 客户端调用“停止”并进行软断开(不触发 OnDisconnected)

4)
0:00 - 客户端连接到服务器,触发 OnConnected
0:10 - 客户端由于拉动以太网电缆而失去连接(没有意识到它已断开连接)
0:~45 - 客户端意识到其已断开连接 *
0:46 - 客户端转换到重新连接状态
1:15 - 服务器确定客户端已经离开太久然后忘记它,排队等待客户端接收的“断开连接”命令,如果它稍后重新连接。 ***
1:15 - OnDisconnected 被触发
1:30 - 客户端停止尝试重新连接(尝试时间过长)**
1:30 - 客户端进入断开状态

* 由于客户端保持活动检查:用于确定客户端何时由于缺少保持活动而离线。不用于长轮询传输

** 由于客户端断开连接超时:用于确定客户端重新连接的时间过长,以及服务器在此期间是否忘记了客户端

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

希望这会有所帮助!

【讨论】:

  • 优秀的答案! SignalR 的人应该把它放在他们的 wiki 中 :-) 非常感谢。
  • 当客户端重新连接时,Context.ConnectionID会发生什么变化,是保持不变还是改变了?此外,当 singalR 客户端“重新连接”到服务器时,在该过程中,是否曾经调用过 OnDisconnected?换句话说,“重新连接”是指(OnDisconnected+OnConnected)吗?
  • 连接 ID 将保持不变。在 OnDisconnected 之后永远不会调用重新连接。因此,您可以从 OnConnected -> OnReconnected 和 OnConnected -> OnDisconnected 开始,但永远不能从 OnDisconnected -> OnReconnected 开始。
  • 没错,您可以随时在客户端处理断开连接的事件,然后重新启动连接以恢复连接
  • 一个优秀的官方解释也是here
猜你喜欢
  • 2016-06-15
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多