不断从 iOS 应用程序轮询服务器以获取新的 JSON?

Posted

技术标签:

【中文标题】不断从 iOS 应用程序轮询服务器以获取新的 JSON?【英文标题】:Constantly poll server for new JSON from iOS app? 【发布时间】:2013-10-17 01:47:19 【问题描述】:

我正在尝试编写一个 ios 应用程序,该应用程序将通知用户我通过 API 作为 JSON 信息访问的产品的价格变化。我想要一个后台任务,每隔 n 分钟重复检查一次服务器是否有新的 JSON,并在满足某些条件时向用户发送通知。这样做的正确方法是什么?

【问题讨论】:

可能不是后台任务。你看过 iOS 7 中的后台获取吗?但它不会每 n 分钟获取一次。 您可以从服务器发送推送通知。在这种情况下,服务器将是访问 API 的服务器,而不是您的应用程序。或者,您可以让应用程序在前台检查 API。你是什​​么意思? 【参考方案1】:

正如之前的海报所提到的,这最好在服务器端完成,而不是通过轮询。但是,使用 Apple Push Service 通知客户端设备并不是理想的解决方案。问题是无法保证交付(根据 Apple),您无法确认交付。用户可以拒绝推送通知,如果您发送的通知过多,Apple 可能会拒绝发送通知,等等。您最好使用PubNubPusher 之类的服务,它以可靠的方式向客户端推送通知两者都有 iOS API。它们非常便宜。如果您想重新发明***并省钱,您可以查看它们的工作原理并编写您自己的版本。

您当然可以进行客户端轮询,在这种情况下异步NSOperation 特别适合(它将在后台线程上运行,您可以在事情发生变化时向NSNotificationCenter 发布通知)。您可以了解更多关于如何实现该here。

【讨论】:

【参考方案2】:

这效果不好。这是一个可能更好的解决方案:

    设置轮询 JSON 数据源的服务器。 当数据源发生变化时,使用Apple Push Service通知用户。 收到通知后,启动后台提取会话。

【讨论】:

以上是关于不断从 iOS 应用程序轮询服务器以获取新的 JSON?的主要内容,如果未能解决你的问题,请参考以下文章

Socket-IO 使用轮询而不是 Websocket

为啥我不断收到 Socket.io 轮询请求的 404 错误?

Node中不断轮询MongoDB的效率

一文了解服务端推送(含JS代码示例)

启动时从应用程序轮询外部服务器

套接字、xmpp 和对 node.js 的轮询 - 高性能和服务器友好