我需要两个创建一个Android映射应用程序,它将有两种类型的客户端和一个Web服务。
客户类型1(要跟踪的客户)
需要跟踪该客户端的位置并实时发送到服务器。这类客户中将有近10-15人
客户端类型2(客户端可查看所有类型1客户端)
这些客户端需要实时显示类型1客户端的位置(最好少于10-15秒的延迟)。请求数据的客户可以有100个类型2。
web服务
将在每个请求中返回类型1客户端的最新位置作为JSON。这将用PHP编写,mySQL将用于存储客户端类型1信息。
客户类型1和类型2是Android客户端。
实现此目的的最佳(最有效和最优雅的方法)除了定期在客户端类型2上进行定期备份以及定期在客户端类型1上发布数据之外,是什么。
答案 0 :(得分:1)
我只是让Client Type 2每隔xx秒轮询一次web服务,具体取决于你想要刷新的频率。
您可以使用推送通知,但由于有许多客户端类型2,您将发送大量通知。
此外,诸如推送通知之类的目标是在更新处于不可预测且相对稀少的速率时保持非活动应用程序为最新。按照新闻应用程序的例子,它只使用通知来获取真正重要的新闻。 “重大新闻”可能需要几天时间,并且您不希望应用程序在非活动状态下不断轮询此事。
然而,您的应用听起来只有在活动时才能正常工作,并且必须以固定的速度更新。
使用推送通知或套接字不会导致电池使用量减少或其他因素,而不是简单地以固定费率使用轮询,假设上述内容与您的应用相关。
答案 1 :(得分:1)
客户类型1
看一下LocationListener类,当客户位置发生变化时会触发事件。
<强> web服务强>
在每个位置更新的事件上存储时间戳,并提供两个服务端点。可以提供所有Type 1客户端的位置。另一个可以提供自Timestamp X以来的Type 1客户端的所有位置。
客户类型2
在启动时拉回所有Type 1客户端的位置并存储时间戳()。对于自上次时间戳以来已更改的记录,每X秒轮询一次您的服务。存储更新的时间戳。
这种方法在您的服务器上工作稍微困难,因为每个Type 2客户端都会请求不同的信息,因此缓存很难,但是因为服务器只存储10-15个类型1客户端的数据应该没有问题。它将减少网络流量,因为没有数据发送给尚未移动的Type 1客户端。
调查长轮询/网络套接字(更高的电池消耗)和推送通知对于听起来像前景应用程序的东西看起来有点高维护是有限的。
答案 2 :(得分:0)
对于任何绊倒这个问题的人:
您还可以使用Java WebSocket在Android应用程序和服务器之间进行双向通信。更新client2的位置后,您可以将其推送到服务器,然后使用websocket连接在client1应用程序上更新它。