嗨,我正在开发android应用程序,我想显示其他人是否在线,以便人们可以发起通信。我想了几个解决方案:
1)实现心跳机制,设备在固定的时间间隔后向服务器发送ping请求。
2)服务器将发送推送类型ping到客户端,客户端将给出响应,以便服务器知道客户端在线。
第一种情况导致电池和数据问题,第二种情况导致推送延迟,影响进程。
对于这个问题有更好的解决办法吗?nilkash。实际上,任何检查网络连接的方法最终都会导致在设备和服务器之间定期发送ping。即使是推送类型的ping实际上也会做同样的事情(但它节省了电池,因为推送通知将所有应用程序的消息聚合到与谷歌服务器的单个连接中)。所以最好的解决方案只是一个适当的优化组合,你必须根据你的请求来选择它们。
- 服务器推送是节能的,主要是因为它们重用了所有应用程序的连接都是一样的,但延迟可能会很大,大概10分钟。
- 您可以订阅连接事件和发送"在线"消息到服务器一旦您在线。(但一旦你离线了就不会,因为你…离线)。这将给出你立即在线事件。
- 当没有连接时,不要从设备发送ping。你的应用程序应该是绝对空闲的,以免使用电池。 没有简单的方法可以找出答案当客户端在服务器端脱机时。你必须进行交易交通/电池时间分辨率。更多时候你发送ping更好的分辨率是。但你不能改变推送的ping间隔,所以如果你需要更好的分辨率,那么你需要使用你自己的连接。但是你也可以通过这个连接发送其他有用的数据。如果你保持一个TCP连接,那么你的ping可以非常有效的数据:TCP保持存活数据包只有60/54字节。但是,您必须与所有客户端保持打开连接服务器。如果你有很多客户端,这可能是一个问题。
最好的组合可能是这样的:当客户端在线时,您总是发送在线消息。在应用程序处于前台时保持TCP连接。您使用相同的连接在应用程序之间传输数据。当你的应用程序进入后台时,你退回到耗电的基于推送的ping,并且每10分钟执行一次。