将不断更新的数据从服务器(通过 REST API 或套接字)发送到 iOS 或 Android 应用程序的最佳方式是什么?我应该创建一个套接字连接并拥有一个输出数据的套接字服务器,还是应该让应用程序定期轮询后端资源?谢谢!
7 回答
我是否应该创建一个套接字连接并拥有一个抽出数据的套接字服务器
这是一个选项。我知道 Play 商店中的一些顶级应用程序使用 Web 套接字来传输数据。
让应用定期轮询后端资源
我建议不要这样做。轮询会耗尽电池电量。android 操作系统有时会让 CPU 处于空闲模式,并且不断的轮询可以唤醒 CPU 并导致电池耗尽。用户不会喜欢这样的。当服务器没有结果时,您也在浪费处理能力。
向安卓手机发送推送通知/次要更新的最简单方法是通过 GCM。GCM 消息几乎是实时传递的(我注意到我的应用程序延迟了大约一秒)。有效负载限制为 4k,消息最多可存储 4 周。这是您可以根据您的用例考虑的另一个选项。
我遵循的典型模型是按指定的时间间隔访问服务器并下载更新的数据。
- 轮询很糟糕,它会耗尽电池
- 如果要在应用程序处于前台时更新屏幕,最好使用 Socket Connection。您可以实时看到变化。
为此,您需要创建一个套接字服务器并打开设备和服务器之间的连接。 https://www.raywenderlich.com/3437391-real-time-communication-with-streams-tutorial-for-ios
我将从几个小时前发布的类似问题中粘贴我接受的答案。
它可以使用套接字或轮询服务器来完成,但我不推荐用于生产级应用程序。您最终将需要安全功能,作为前端开发人员,很难从头开始。
我建议使用第三方服务。看看空间云。它是 Firebase 的开源替代品,您可以在其中使用自己的数据库并内置安全功能。如果您想更深入,它使用Apache Kafka来实现实时数据库功能。
如果这些不适合您,那么最好的选择是使用 GCM。
通常,您会希望您的服务器将更新推送到客户端,因为轮询成本高昂,可能无法与N数量的客户端很好地扩展,并且会更快地耗尽您的手机电池。根据您的服务器技术:
.NET/Core:可能想看看SignalR将通知从后端推送到您的客户端应用程序。
Java:可能想看看Atmosphere将通知从后端推送到您的客户端应用程序。
我使用 SignalR 向电话客户端发布了良好的结果。没用过Atmosphere,但评价不错。
我建议使用 MQTT 协议来发布和订阅数据。用于集成 MQTT 协议的 iOS(Moscapsule)和 Android(Paho)库可用,并且可以轻松集成到移动应用程序中。后端也需要配置为支持 MQTT。可以在此处找到有关 MQTT 如何工作的详细信息。
我应该让应用程序定期轮询后端资源吗?
这必须是最后考虑的选择。只要客户端数量增加,您就需要扩展后端/服务器,这并不像在现有服务器旁边放置另一台服务器那么简单。
完美的解决方案将是面向推送的设计,最好的方法是将客户端注册到事件,如果发生特定事件,服务器将推送客户端。
您需要更具体地了解您的业务案例。您在问题中提到了实时,但那是什么实时。它是视频流、聊天应用程序还是普通的休息电话?