官方文档中的This document是了解SignalR生命周期事件和状态的一个很好的开始.但是似乎缺少了一些东西:如何确定connectionSlow切换回正常状态的时刻?
触发ConnectionSlow事件时,我想向用户显示一条消息.但是我不知道什么时候隐藏此消息:
>如果重新连接事件被触发,没问题:我只需要等待重新连接事件或关闭事件,然后隐藏消息或显示致命错误.
>如果未触发重新连接事件,则可能是因为连接无需重新连接即可返回“正常”状态.我应该用什么来识别?
我开始使用HubConnection
类及其StateChanged
事件进行工作,但是ConnectionState
枚举没有ConnectionSlow状态.
解决方法:
如您所知,ConnectionSlow不是状态,它只是一个事件,表明SignalR客户端错过了预期的保持活动消息.
默认情况下,如果客户端在触发ConnectionSlow的约7秒内未收到任何存活请求,它将开始尝试重新连接.因此,如果客户端在ConnectionSlow触发后的10秒钟内没有开始重新连接,则可以安全地假定SignalR在ConnectionSlow触发后收到了保持活动状态.
这并不一定意味着连接不再变慢,但这确实意味着SignalR将再等待〜13秒,而没有收到另一个保持活动状态,然后再次触发ConnectionSlow.这意味着SignalR将自动尝试重新连接,总共花费约20秒而没有保持活动状态.所有这些数字都是使用SignalR的默认10秒保持活动间隔来计算的.
SignalR’s documentation on the Understanding and Handling Connection Lifetime Events更深入.