我在SignalR中遇到以下问题,用户通过移动设备访问我的网站。 问题是,当手机锁定或用户转到另一个应用程序时,服务器上会触发Disconnect()方法(我尝试向服务器发送一条消息并等待它通过SignalR回复但是没有来自服务器上触发Disconnect方法后的服务器)。在此之后它接缝,因为客户端不再连接到服务器。
客户端如何告诉服务器它已回来了?
答案 0 :(得分:5)
您可以停止连接:
$.connection.hub.stop()
然后通过
重新启动它$.connection.hub.start();
在SignalR的下一个版本中,我们将为您解决此问题,但是对于过渡期,您必须自己管理它。我建议在客户端检测服务器是否已经死,然后运行停止 - >启动。
答案 1 :(得分:4)
我们有类似的情况从移动设备连接。在我们的示例中,调用.Stop()或尝试处置现有连接需要30秒,具体取决于底层连接处于非活动状态的时间。 (底层协议有你可以配置的超时)
我们的解决方案是清理所有处理的事件并取消引用集线器连接对象 - 然后在重新激活应用程序后重新开始使用新实例。这可靠地工作,几乎是即时的。服务器断开连接事件也会正确触发,但会为每个断开连接的实例触发。
我已在此帖Best practice for reconnecting SignalR 2.0 .NET client to server hub中记录了我们的旅程和解决方案。希望它有所帮助。
答案 2 :(得分:0)
我认为服务器上的Disconnect会触发客户端订阅从内存中删除。
因此,当客户端回来时,服务器不知道客户端。