检测设备的在线状态并发送回服务器

时间:2016-09-15 06:14:00

标签: android push-notification server heartbeat

您好我正在开发Android应用程序,其中我想显示其他人是否在线,以便人们可以开始沟通。我想到的解决方案很少:

1)实施心跳机制,其中设备将在修复时间间隔后向服务器发送ping请求。

2)服务器会向客户端发送推送类型ping ,客户端会对此做出响应,以便服务器知道客户端在线。

第一种情况导致电池和数据问题,而第二种情况导致推迟延迟,这将影响过程。

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

1 个答案:

答案 0 :(得分:2)

nilkash。实际上,检查网络连接的任何方法最终都会导致在设备和服务器之间发送定期ping。即使推送类型ping实际上也会这样做(但它节省了电池,因为推送通知将所有应用程序的消息聚合到一个连接到谷歌服务器的连接)。因此,最佳解决方案只是优化的适当组合,您必须根据您的要求选择它们。

  1. 服务器推送是节能的,主要是因为它们重用了 所有应用程序的连接相同,但延迟可能很大, 类似10分钟的事情。
  2. 您可以订阅连接 活动并发送"在线"在线后向服务器发送消息。 (但 一旦你离线,因为你是...离线)。这会给 你立即在线活动。
  3. 当没有连接时,请勿从设备发送ping。您的应用程序应绝对空闲,以免使用电池。
  4. 没有简单的方法可以找到答案 当客户端在服务器端脱机时。你必须交易 交通/电池的时间分辨率。你经常发送ping,the 更好的分辨率。但你不能改变推送的ping间隔, 因此,如果您需要更好的分辨率,那么您需要使用自己的分辨率 连接。但您也可以通过该连接发送其他有用的数据。
  5. 如果你保持TCP连接,那么你的ping可以 数据效率非常高:TCP保持活动数据包只有60/54字节。 但是你必须与所有客户保持开放的联系 服务器。如果你有很多客户,这可能是个问题。
  6. 最佳组合可能是这样的:您总是在客户端上线时发送在线消息。应用程序在前台时保持TCP连接。您使用相同的连接与应用程序之间传输数据。当您的应用程序进入后台时,您将回退到耗电的基于推送的ping操作,并以10分钟为基础进行操作。