0

我需要两个创建一个 Android 地图应用程序,它将有两种类型的客户端和一个 web 服务。

Client Type 1(Client to be tracking)
该客户端的位置需要被实时跟踪并发送到服务器。最多会有 10-15 个此类客户

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

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

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

除了定期在客户端类型 2 上发送消息并在客户端类型 1 上定期发布数据之外,实现此目标的最佳(最有效和最优雅的方法)是什么。

4

3 回答 3

1

我只是让客户端类型 2 每 xx 秒轮询一次 web 服务,具体取决于您希望它刷新的频率。

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

此外,推送通知等内容的目标是在更新速度不可预测且相对罕见的情况下使非活动应用程序保持最新状态。以新闻应用为例,它只对真正的重大新闻使用通知。“重大新闻”可能需要几天的时间才能发生,并且您不希望应用程序在非活动状态下不断轮询。

但是,您的应用程序听起来,因为它只会在活动时才起作用,并且必须以固定的速度进行更新。

假设以上关于您的应用程序的情况,使用推送通知或套接字不会导致比简单地以固定速率使用轮询方式减少电池使用量或其他因素。

于 2013-08-29T09:46:14.350 回答
1

客户端类型 1
查看LocationListener类,它会在客户端位置更改时触发事件。

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

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

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

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

于 2013-08-29T09:52:25.343 回答
0

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

您还可以使用 Java WebSocket 在 android 应用程序和服务器之间进行双向通信。一旦 client2 的位置更新,您可以将其推送到服务器,然后使用 websocket 连接在 client1 应用程序上更新它。

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

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

于 2016-03-16T12:11:12.033 回答