实时地图应用程序Android



我需要两个人来创建一个Android映射应用程序,该应用程序将有两种类型的客户端和一个Web服务

客户端类型1(要跟踪的客户端)
需要实时跟踪此客户端的位置并将其发送到服务器。至少会有10-15个此类客户

客户端类型2(查看所有类型1客户端的客户端)
这些客户端需要实时显示类型1客户端的位置(延迟最好小于10-15秒)。对于请求数据的客户端,可以有100个类型为2的

Web服务
将在每个请求中以JSON的形式返回类型1客户端的最新位置。这将用PHP编写,mySQL将用于存储客户端类型1的信息。

客户端类型1和类型2是Android客户端。

除了在类型2的客户端上定期发布数据和在类型1的客户端上周期性发布数据之外,实现这一点的最佳方法(最有效和最优雅的方法)是什么。

我只让ClientType2每隔xx秒轮询一次Web服务,这取决于您希望它刷新的频率。

你可以使用推送通知,但由于有很多类型2的客户端,你会发送很多通知。

此外,推送通知等功能的目标是在更新速度不可预测且相对罕见的情况下,保持非活动应用程序的最新状态。例如,新闻应用程序只对重大新闻使用通知。"重大新闻"可能需要几天时间才能发生,你不希望应用程序在非活动状态下不断对此进行轮询。

然而,你的应用程序听起来只能在活动时工作,并且必须以固定的速度更新。

假设你的应用程序如上所述,使用推送通知或套接字不会比简单地以固定速率使用轮询减少电池使用量或其他因素。

客户端类型1
看看LocationListener类,它将在客户端位置更改时激发事件

Web服务
在每个位置更新的事件上存储时间戳,并提供两个服务端点。可以提供所有类型1客户端的位置。另一个可以提供自时间戳X.以来类型1客户端的所有位置

客户端类型2
启动时,回调所有类型1客户端的位置,并存储time now()的时间戳。每X秒轮询一次您的服务,查找自上次时间戳以来更改的记录。存储更新的时间戳。

这种方法在服务器上的工作稍微困难一些,因为您的每个类型2客户端都将请求不同的信息,因此缓存很困难,但由于服务器只存储10-15个类型1客户端的数据,这应该没有问题。它将减少网络流量,因为没有为尚未移动的类型1客户端发送数据。

研究长轮询/web套接字(更高的电池消耗)的优势有限,对于听起来像前台应用程序的东西,推送通知似乎有点高维护。

对于任何偶然发现这个问题的人:

您还可以使用JavaWebSocket在android应用程序和服务器之间进行双向通信。更新了客户端2的位置后,您可以将其推送到服务器,然后使用websocket连接在客户端1应用程序上进行更新。

https://github.com/TooTallNate/Java-WebSocket

对于iOS:https://github.com/square/SocketRocket

相关内容

  • 没有找到相关文章

最新更新