Signalr 信号器超时属性
我们遇到了指定不同超时属性的链接: 这篇关于signar客户机和signar服务器之间的断开和重新连接是如何发生的优秀文章() 只需重复上述帖子中的不同情况: “当客户端脱机后不久恢复连接时,会发生集线器重新连接。信号器配置值主要决定以下示例的时间戳,因此不要逐字记录时间 以下是几个涉及重新连接行为的示例及其结果(时间格式m:ss): 情景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-OnDisconnect在1:16触发-客户端恢复连接 1:17-客户端进行“软”重新连接(重新连接时不触发) 1:18-客户端检索“断开连接”命令 1:19-客户端调用“停止”并进行软断开连接(不会触发OnDisconnected) 情景4 0:00-客户端连接到服务器,已触发OnConnected 0:10-由于拉以太网电缆,客户端失去连接(未意识到已断开连接) 0:~45-客户端实现其已断开连接* 0:46-客户端转换为重新连接状态 1:15-服务器确定客户端已离开太久,然后忘记它,排队等待“断开”命令,以便客户端在稍晚重新连接时接收*** 1:15-1:30触发OnDisconnect-客户端停止尝试重新连接(尝试时间过长)** 1:30-客户端转换为断开连接状态Signalr 信号器超时属性,signalr,signalr-hub,signalr.client,Signalr,Signalr Hub,Signalr.client,我们遇到了指定不同超时属性的链接: 这篇关于signar客户机和signar服务器之间的断开和重新连接是如何发生的优秀文章() 只需重复上述帖子中的不同情况: “当客户端脱机后不久恢复连接时,会发生集线器重新连接。信号器配置值主要决定以下示例的时间戳,因此不要逐字记录时间 以下是几个涉及重新连接行为的示例及其结果(时间格式m:ss): 情景1 0:00-客户端连接到服务器,已触发OnConnected 0:10-客户端由于ISP问题而失去连接(并意识到它失去了连接) 0:15-客户端重新连接
- 由于客户端保持活动检查:用于确定客户端何时因缺少保持活动而脱机。不用于长轮询传输
我们发现,.NET SignalR客户端和ASP.NET MVC SignalR服务器之间的断开和重新连接非常频繁(上面的1和2),而且断开也不会导致重新连接(上面的3和4)。我们知道正在使用ServerSentEvents协议 很难知道我们需要调整(增加或减少)哪些超时属性以:
- ConnectionTimeout=110秒
- 断开超时=30秒
- KeepAlive=30秒
此外,我们正在使用SignalR 1.0.1。您的超时设置正确。在当前版本中,.net客户端没有客户端保持活动状态以确保客户端保持连接 在下一个版本中,您将有一个.net客户端保持活动状态。如果您愿意使用该项目的开发版本,该功能目前在开发分支上可用
这里还有一个与您看到的内容相关的问题供参考。您使用的是SignalR 1.0.1吗?Taylor对重新连接过程的描述适用于SignalR版本>=1.0和JS客户端。我询问的原因是,在signar>=1.0中,
KeepAlive
必须不超过断开超时的三分之一。KeepAlive
和DisconnectTimeout
绝对不能相等
但是,如果在KeepAlive
之后设置了DisconnectTimeout
,则保持活动将设置为DisconnectTimeout
的三分之一。在您的情况下,这将是10秒的默认值
很多问题在Signalr1.0中都得到了解决,因此如果您还没有升级,那么它绝对值得升级。不过,正如其他答案所指出的那样,.NET客户端将不支持保持活动状态检查,并且在1.1之前不会识别网线已被拔出
另外,您可以随时手动重新启动yo