SignalR服务器重启后如何维护SignalR组和连接?

时间:2015-11-21 04:23:43

标签: c# asp.net signalr signalr-hub

我的系统由

组成
  1. SignalR服务器
  2. 连接到所述SignalR服务器的多个C#客户端。
  3. 据我所知,一旦连接这些客户端,就会拥有自己的关联ConnectionId

    现在,我想实现一个弹性策略,在重新启动SignalR服务器之后,它仍然应该保留它以前在Hub中拥有的组和连接。

    我正在考虑通过将Groups和ConnectionIds存储在外部存储(例如数据库)中来实现这一点,并在应用程序启动时将其还原。

    当服务器出现故障时,客户端的连接可能已断开。但是,通过使客户端始终尝试在断开连接时重新连接,可以稍微减轻这种情况。服务器启动后,客户端将重新连接。

    然而,这种解决方案感觉相当不稳定。特别是,我不确定一旦客户端重新连接它将保留相同的ConnectionId

    这种方法有意义吗?有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

是的,客户端使用相同的 connectionID重新连接始终
仅在以下情况下更新connectionID:

  1. 从客户端调用connection.stop()方法
  2. 服务器检测到客户端断开连接并在服务器上断开连接+向发生重新连接的客户端发送断开连接消息。那些客户端将关闭连接。所以客户端 - 服务器再次同步。
  3. 如果客户端连接到即将重新启动的服务器,则客户端会在断开连接时发现并尝试使用相同的connectionID重新连接到服务器,所有这些都在给定的时间范围内,由连接超时
    如果服务器在连接超时帧中重新 ,则客户端将使用现有ID重新连接到服务器。 在这种情况下,在服务器上触发Reconnect()事件,而不发生OnConnected()事件。这是一个特殊的信号灯案例。
    非常防御地对您的Reconnect()事件进行编码。

    link to official documentation explaining this issue
    章节:服务器断开连接方案