6

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

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

4

3 回答 3

5

You can stop the connection:

$.connection.hub.stop() 

and then restart it via

$.connection.hub.start();

In the next version of SignalR we will take care of this for you, but for the interim you will have to manage it yourself. I'd recommend detecting on the client if the server is dead and then running the stop -> start.

于 2012-09-27T17:17:43.147 回答
4

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

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

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

于 2014-07-09T15:56:26.657 回答
0

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

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

于 2012-10-05T13:12:54.017 回答