我的系统由
组成据我所知,一旦连接这些客户端,就会拥有自己的关联ConnectionId
。
现在,我想实现一个弹性策略,在重新启动SignalR服务器之后,它仍然应该保留它以前在Hub中拥有的组和连接。
我正在考虑通过将Groups和ConnectionIds存储在外部存储(例如数据库)中来实现这一点,并在应用程序启动时将其还原。
当服务器出现故障时,客户端的连接可能已断开。但是,通过使客户端始终尝试在断开连接时重新连接,可以稍微减轻这种情况。服务器启动后,客户端将重新连接。
然而,这种解决方案感觉相当不稳定。特别是,我不确定一旦客户端重新连接它将保留相同的ConnectionId
。
这种方法有意义吗?有没有更好的方法呢?
答案 0 :(得分:1)
是的,客户端使用相同的 connectionID重新连接始终。
仅在以下情况下更新connectionID:
如果客户端连接到即将重新启动的服务器,则客户端会在断开连接时发现并尝试使用相同的connectionID重新连接到服务器,所有这些都在给定的时间范围内,由连接超时。
如果服务器在连接超时帧中重新 ,则客户端将使用现有ID重新连接到服务器。
在这种情况下,在服务器上触发Reconnect()事件,而不发生OnConnected()事件。这是一个特殊的信号灯案例。
非常防御地对您的Reconnect()事件进行编码。
link to official documentation explaining this issue
章节:服务器断开连接方案