我有一个 IOT项目,其中多个设备将其当前位置更新到IOT服务器。服务器解析收到的十六进制数据并将它们存储在 MySQL数据库中。我有一个独立的REST API服务器,它会查询此数据库以检索设备的当前位置并将其显示在Android的地图上。
现在,由于设备的刷新率和Android API请求,更新地图上的位置时存在相当大的延迟。如何将其转换为实时设计,无需从数据库中读取数据,只需将数据直接发送到Android客户端即可?
注意:多个Android设备可能会请求同一GPS设备的实时更新。
我正在考虑使用firebase GCM推送通知将位置发送到请求实时视图更新的Android / iOS设备。但是,我认为这样效率很低。因为这不是非常无状态的,因为我必须监控当前请求推送通知的设备列表,并进行一些握手来启动/停止通知。
我可以使用网络套接字代替在Android和服务器应用之间建立连接吗?互联网连接的质量在这里过分重要吗?我意识到有点像UDP用于更新位置,最近的数据包在这里很重要,任何跳过的位置数据都不会贡献太多。
答案 0 :(得分:1)
基于我们的讨论 我认为GCM对于这类问题是一个很好的选择。
您的用户和并发用户总数并不多,据我所知,FCM存在一个限制,即“对于每个发件人ID,FCM允许并行连接1000个”。 you can find it here
另一个限制是关于FCM存储的消息数量。离线用户在联机之前不会收到消息,限制为100条消息。所以这可能是一个问题,但是当用户在线时,FCM会发送一条可以在客户端处理的消息,我的意思是你会告知情况所以你可以要求服务器发送最后的更新消息,但如果是最后一次更新消息一个对你很重要,事实并非如此,你没有任何问题,因为客户很快就会收到最后一次更新。
无论如何,基于GCM / FCM,您只需要担心在获得更新时发送消息。考虑到GCM不仅仅是推送通知,您可以处理BroadcastReceiver.With FCM中的消息,您可以向客户端发送两种类型的消息:reference
通知消息,有时被视为“显示消息”。
数据消息,由客户端应用程序处理。
在这种情况下,您需要使用数据消息。
因此,根据这些信息,我建议采用以下方案:
希望这会对你有所帮助。如果我们应该考虑任何其他方面,请告诉我。
谢谢