【问题标题】:SignalR - how to reconnect client to server (how to restart SignalR)SignalR - 如何将客户端重新连接到服务器(如何重新启动 SignalR)
【发布时间】:2014-07-09 23:56:26
【问题描述】:

当用户从移动设备访问我的网站时,我遇到以下 SignalR 问题。 问题是,当手机锁定或用户转到另一个应用程序时,服务器上会触发 Disconnect() 方法(我尝试向服务器发送消息并等待它通过 SignalR 回复,但没有来自在服务器上触发 Disconnect 方法后的服务器)。在此之后,它会随着客户端不再连接到服务器而缝合。

客户端如何告诉服务器它回来了?

【问题讨论】:

    标签: signalr signalr-hub signalr.client


    【解决方案1】:

    您可以停止连接:

    $.connection.hub.stop() 
    

    然后通过

    重启
    $.connection.hub.start();
    

    在 SignalR 的下一个版本中,我们将为您解决这个问题,但在此期间,您必须自己管理它。我建议在客户端检测服务器是否死机,然后运行 ​​stop -> start。

    【讨论】:

    • 在某些情况下我仍然会看到这一点,即使是在今天的当前版本上 - 所以提示:如果合适,请确保在每次启动时再次执行任何“启动成功”活动。
    【解决方案2】:

    我们也遇到过从移动设备连接的类似情况。在我们的例子中,调用 .Stop() 或尝试处理现有连接需要 30 秒,具体取决于底层连接处于非活动状态的时间。 (底层协议有超时可以配置)

    我们的解决方案是清理所有已处理的事件并取消对集线器连接对象的引用 - 然后在重新激活应用程序后使用新实例重新开始。这工作可靠,几乎是即时的。服务器断开连接事件也会正确触发,尽管它会针对每个断开连接的实例触发。

    我在Best practice for reconnecting SignalR 2.0 .NET client to server hub 这篇博文中记录了我们的旅程和解决方案。希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      我认为服务器上的断开连接会触发客户端订阅从内存中删除。

      因此,当客户端返回时,服务器不知道客户端。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多