我有一个SignalR HUB,它维护各种连接客户端的内存存储库,其中包含一些我们用来处理请求的数据。理想情况下,这些客户将始终保持联系。
我遇到的问题是当我们需要将补丁推送到集线器时,我们发布它并回收服务器。这种情况很快发生,客户端仍然保持连接,但由于网站已被回收,因此集线器使用的内存已被清除,存储库不再存在。
也许这对我来说是一个设计缺陷,但有没有办法在循环服务器时强制连接丢失,或者我应该使用除了简单的内存单例之外的东西来存储我的存储库?或者我是否完全误解了这里发生的事情?
答案 0 :(得分:1)
您可以使用类似于此处发布的内容:OnDisconnect and Logged on Users after recycle?
我有同样的问题,我做的是:
1 - 让所有客户注册“ForceRestart”'功能:
_proxy.On("ForceRestart", () => _hub.Stop());
2 - 所以在服务器构造函数中,当连接的客户端数量(我在内存中跟踪)为零时,表示服务器已被回收,或者服务器是全新的,所以我打电话:
IHubContext _hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
_hubContext.Clients.All.ForceRestart();
这样我就可以清理所有剩余的虚拟连接。我希望这会有所帮助。
答案 1 :(得分:-1)
信号器文档中有很多好的信息。检查&#34; 服务器断开连接方案&#34; this
的一部分