2016-09-15 29 views
2

您好我正在开发中,我想证明对方是否在线与否的Android应用程序,这样人就可以intiate的communication.I想到几个解决方案:检测设备的在线状态,并发送回服务器

1)执行心跳机制,其中设备将在定时间隔后向服务器发送ping请求。

2)服务器会发送推键入ping到客户端和客户端会给上反应,从而使服务器知道客户端联机。

第一种情况会导致电池和数据问题,而第二种情况会导致推送延迟,从而影响流程。

这个问题有没有更好的解决方案?除了上述这些或即兴版本之外。

回答

2

nilkash。几乎任何检查网络连接的方法最终都会导致在设备和服务器之间发送周期性的ping。即使推式ping也会实现相同的效果(但它可以节省电池,因为推送通知将所有应用程序的消息汇总到一个连接到谷歌服务器的单个连接中)。所以最好的解决方案只是适当的优化组合,您必须根据您的要求选择它们。

  1. 服务器推出的节能,主要是因为他们重复使用的所有应用程序 相同的连接,但延迟可以是巨大的, 像10分钟。
  2. 您可以订阅连接 事件,并在您上线后向服务器发送“在线”消息。 (但是 不是因为你离线而离线)。这将给你的直接在线事件 。
  3. 当没有连接时,不要从设备发送ping。您的应用程序应绝对闲置以免使用电池。
  4. 当客户端在服务器端下线时,没有简单的方法可以找出 。您必须交易 流量/电池时间分辨率。更多的时候你发送ping, 更好的分辨率。但是,您无法更改ping时间间隔以进行推送,因此如果您需要更好的分辨率,那么您需要使用自己的 连接。但是您也可以通过该连接发送其他有用的数据。
  5. 如果你保持TCP连接,那么你的ping可以是 非常有效的数据:TCP保持活动的数据包只是60/54字节。 但是,您必须与 服务器上的所有客户端保持开放连接。如果你有很多客户,这可能是一个问题。

最好的组合可能是这样的:当客户端变为在线时,您总是发送来自客户端的在线消息。您在应用程序处于前台时保持TCP连接。您使用相同的连接将数据传入应用程序和从应用程序传输数据。当您的应用程序进入后台时,您将回退至耗电的基于ping的ping,并以10分钟为基准执行这些操作。

+0

太好了。如果有任何示例代码会更好 – androidXP

相关问题