如何使用SignalR处理移动设备上的断开连接事件?

时间:2016-05-15 22:36:06

标签: javascript c# websocket signalr

我有两台运行网络应用的iPad。 Web应用程序通过signalR与服务器通信。原因是服务器需要将特定数据发送到特定的iPad。因此,它需要跟踪哪个iPad打开/关闭。

iPad有以下方法让应用程序进入休眠状态。

  1. iPad进入睡眠状态
  2. 用户杀死Safari
  3. iPad耗尽内存
  4. 如何在服务器上检测到这些?所以我知道不要发送数据。 我已经尝试过断线事件,但需要时间才能触发(默认情况下为45秒左右)。

1 个答案:

答案 0 :(得分:1)

简短的回答是,在连接超时前你不会确定,因为SignalR在此之前不会知道。

即使在看起来最像它应该会产生某种信号的情况下,你可以陷阱 - iPad转换到待机状态 - 没有通知你可以使用你的JavaScript代码来让你整理你的连接之前发生了。

根据您发送给客户端的数据的性质,您可以通过切换到数据可用通知格式来最小化缓冲,其中服务器向客户端发送最小数据包以通知数据正在等待要检索,然后让客户端请求信息。在某些情况下,这可以大大减少应用程序或传输层中缓冲的数据量。

当然,如果每个通知都有几千字节的数据,并且您必须将它们全部保存为顺序传送,这只会减少传输层的缓冲,将其移回一步并使其成为应用程序的责任。 / p>

另一个选择是让客户端发送从JS计时器实例运行的心跳。每隔一秒左右(取决于您需要的实时)客户端在服务器上调用一个方法,它基本上只是让您知道哪些方法仍然存在。在几次失败的签到后 - 例如5次错过听证会 - 您可以假设客户端已经离开并停止向其发送信息。服务器需要跟踪每个客户端连接的最后一次心跳,并且每次要向特定客户端发送内容时,只需检查它是否最近已检入过。如果没有,请让数据提供者知道客户端是否处于脱机状态,直到它再次检入为止,此时您可能需要告诉它重新加载并重新开始。