我开始使用SignalR,试图弄清楚Hub Reconnect何时发生。在网上没有找到令人满意的解释。有人能解释一下何时/为什么会发生重新连接吗?
我开始使用SignalR,试图弄清楚Hub Reconnect何时发生。在网上没有找到令人满意的解释。有人能解释一下何时/为什么会发生重新连接吗?
当客户端断开连接然后在短时间内重新连接时,将发生重新连接(hub reconnect)事件。下面是几个涉及重新连接行为的示例和它们的结果(时间格式 m:ss)。以下示例中,SignalR 配置值在很大程度上确定时间戳,因此不要直接以示例中的时间为准。
提到以下内容时,我指的是服务器端的 Hub 方法
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 事件)
4)
0:00 - 客户端连接到服务器,触发OnConnected事件
0:10 - 客户端因拔出以太网电缆而失去连接(没有意识到已经断开连接)
0:~45 - 客户端意识到它已经断开连接 *
0:46 - 客户端转换为重新连接状态
1:15 - 服务器确定客户端离开的时间过长,然后忘记该客户端,并排队等待一个“断开”命令,以便稍后重新连接时接收。 ***
1:15 - 触发OnDisconnected事件
1:30 - 客户端停止尝试重新连接(尝试时间太长)**
1:30 - 客户端转换为已断开状态
*由于客户端端保持活动检查:用于确定客户端是否由于缺乏保持活动而离线。 不适用于长轮询传输
**由于客户端端断开超时:用于确定客户端重新连接的时间太长,服务器在此期间可能已经忘记了客户端
***由于服务器断开超时:用于确定何时应忘记客户端。 这是一个时间跨度,一旦服务器将连接标记为死亡状态,就开始累计。 最终,服务器会为客户端的主题排队一个断开命令,该命令会告诉客户端(如果重新连接)需要开始一个新的连接。 当主题清理时,命令将从服务器中消失。