SignalR - 如何将客户端重新连接到服务器(如何重新启动SignalR)

时间:2012-09-24 06:00:17

标签: signalr signalr-hub signalr.client

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

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

3 个答案:

答案 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会触发客户端订阅从内存中删除。

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