将实时位置更新从 J2EE 服务器发送到 android

Sending realtime location updates from J2EE server to android

我有一个 IOT 项目,其中多个设备将它们的当前位置更新到 IOT 服务器。服务器解析接收到的十六进制数据并将它们存储在MySQL数据库中。我有一个 独立的 REST API 服务器 查询此数据库以检索设备的当前位置并将其显示在 Android 中的地图上。

现在由于设备的刷新率和 Android API 请求,在更新地图上的位置时 相当长的延迟 .我怎样才能将其转换为实时设计,从而无需从数据库中读取数据而直接将数据发送到 Android 客户端?

注意:多个 android 设备可能会请求同一 GPS 设备的实时更新。

我正在考虑使用 firebase GCM 推送通知 将位置传送到已请求实时视图更新的 Android/iOS 设备。但是,我认为这将是低效的。因为这不会是非常无状态的,因为我必须监视当前请求推送通知的设备列表并对 start/stop 通知进行一些握手。

我可以使用 web sockets 在 android 和服务器应用程序本身之间建立连接吗?互联网连接的质量在这里是否过分重要?我意识到有点像 UDP 更新位置,最近的数据包在这里很重要,任何跳过的位置数据都不会贡献太多。

根据我们的讨论 我认为 GCM 是解决这类问题的一个很好的选择。

您的用户总数和并发用户数并没有那么多,据我所知,FCM 有一个限制,即“对于每个发件人 ID,FCM 允许 1000 个并行连接”。 you can find it here

另一个限制是关于 FCM 中存储消息的数量。离线用户在上线之前不会收到消息,限制为 100 条消息。所以这可能是个问题,但是当用户在线时,FCM 将发送一条可以在客户端处理的消息,我的意思是你会通知这种情况,所以你可以要求服务器发送最后更新消息,但如果只有最后一次一个对你很重要,事实并非如此,你没有任何问题,因为客户端很快就会收到最后的更新。

无论如何,基于 GCM/FCM,您只需要担心在收到更新时发送消息即可。考虑到 GCM 不仅仅是推送通知,您可以处理 BroadcastReceiver.With FCM 中的消息,您可以向客户端发送两种类型的消息:reference

  1. 通知消息,有时被认为是"display messages."

  2. 数据消息,由客户端应用处理。

在这种情况下,您需要使用数据消息。

因此,根据这些信息,我建议以下场景:

  1. 设备向服务器端发送更新。
  2. 服务器将为感兴趣的客户端发送 GCM 消息 在服务器端,您可以处理感兴趣的客户端,并且需要使其并行。

希望对您有所帮助。如果还有任何其他方面我们应该考虑,请告诉我。

感谢