Signalr 信号器超时属性

Signalr 信号器超时属性,signalr,signalr-hub,signalr.client,Signalr,Signalr Hub,Signalr.client,我们遇到了指定不同超时属性的链接: 这篇关于signar客户机和signar服务器之间的断开和重新连接是如何发生的优秀文章() 只需重复上述帖子中的不同情况: “当客户端脱机后不久恢复连接时,会发生集线器重新连接。信号器配置值主要决定以下示例的时间戳,因此不要逐字记录时间 以下是几个涉及重新连接行为的示例及其结果(时间格式m:ss): 情景1 0:00-客户端连接到服务器,已触发OnConnected 0:10-客户端由于ISP问题而失去连接(并意识到它失去了连接) 0:15-客户端重新连接

我们遇到了指定不同超时属性的链接:

这篇关于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-客户端转换为断开连接状态

  • 由于客户端保持活动检查:用于确定客户端何时因缺少保持活动而脱机。不用于长轮询传输
**由于客户端断开连接超时:用于确定客户端何时重新连接的时间过长,以及服务器在此期间忘记客户端的可能性

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


我们发现,.NET SignalR客户端和ASP.NET MVC SignalR服务器之间的断开和重新连接非常频繁(上面的1和2),而且断开也不会导致重新连接(上面的3和4)。我们知道正在使用ServerSentEvents协议

很难知道我们需要调整(增加或减少)哪些超时属性以:

  • 减少断开和重新连接的次数
  • 根本不会在第三和第四种情况下结束 这里需要注意的一点是,我们的.NET Signal客户端实际上是一个始终连接到服务器的windows服务

    我们目前只保留了以下默认值:

    • 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