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