【问题标题】:How to close connections when cycling a SignalR hub循环 SignalR 集线器时如何关闭连接
【发布时间】:2014-11-10 21:33:47
【问题描述】:

我有一个 SignalR HUB,它维护着各种连接客户端的内存存储库,其中包含一些我们用来处理请求的数据。理想情况下,这些客户端将始终保持连接。

我遇到的问题是当我们需要将补丁推送到集线器时,我们发布它并回收服务器。这种情况发生得很快,客户端仍然保持连接,但由于网站已被回收,集线器使用的内存已被清除,存储库不再存在。

也许这是我的设计缺陷,但是有没有办法在循环服务器时强制断开连接,或者我应该为我的存储库使用简单的内存单例以外的东西?还是我完全误解了这里发生的事情?

【问题讨论】:

    标签: iis signalr


    【解决方案1】:

    您可以使用类似于此处发布的内容:OnDisconnect and Logged on Users after recycle?

    我遇到了同样的问题,我所做的是:

    1-让所有客户端注册一个'ForceRestart'函数:

    _proxy.On("ForceRestart", () => _hub.Stop());
    

    2-so在服务器构造函数中,当连接的客户端数量(我在内存中跟踪)为零时,表示服务器已经被回收,或者服务器是全新的,所以我调用:

    IHubContext _hubContext = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
    _hubContext.Clients.All.ForceRestart();
    

    这样我清理了所有剩余的虚拟连接。我希望这会有所帮助。

    【讨论】:

    • 这与我的想法一致,只是不确定是否有更好的方法。感谢您的意见!
    【解决方案2】:

    signalr 文档中有很多很好的信息。检查this的“服务器断开情况”部分

    【讨论】:

    • 我已经详细研究了这个页面,我们确实有处理所有断开连接场景的处理程序,但这并没有解决我帖子中的具体问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 2021-03-23
    • 2013-05-28
    • 2014-01-28
    • 2017-03-11
    相关资源
    最近更新 更多