【问题标题】:Best practices in iOS for polling a webservice about task completioniOS 中轮询 Web 服务关于任务完成的最佳实践
【发布时间】:2013-04-01 22:45:42
【问题描述】:

假设我们有一个与 Web 服务通信的 iOS 应用。一些请求被委托给另一个 Web 服务,以便在另一端进行操作时立即返回 HTTP 200 状态代码:

|iOS app|          |Main service|    |Delegate service|   
    |     request        |                    |
    |------------------->|_      delegate     |_
    |                    | |----------------->| |
    |     HTTP 200       | |     accepted     | |
    |<-------------------|_|<-----------------| |
    |                    |                    | |
    |                    |                    | | 
    |     status?        |                    | |
    |------------------->|_                   | |
    |                    | |                  | |
    |     pending        | |                  | |
    |<-------------------|_|                  | |
    |                    |                    | |
    |                    |      finished      | |
    |                    |<-------------------|_|
    |                    |                    |
    |     status?        |                    |
    |------------------->|_                   |
    |                    | |                  |
    |     finished       | |                  |
    |<-------------------|_|                  |
    |                    |                    |
    |                    |                    |

这些请求可以持续 20 秒到 2 分钟,因此我们可以每 15-20 秒轮询一次服务器。

实施此类场景的最佳做法是什么?如果我们决定实施每 20 秒一个请求(限制为 6 个请求)的轮询策略,Apple 是否会拒绝该应用程序?

不幸的是,长轮询策略也不支持服务器(它不在我们的控制之下)。服务器只是在每个请求上返回一个状态 JSON。

我们试图避免使用推送通知,因为这些请求属于低级任务,用户不必明确参与。

【问题讨论】:

  • 我不确定这是回答这个问题的最佳地点。您可能想尝试 StackExchange (programmers.stackexchange.com) 的“程序员”网站

标签: ios web-services long-polling polling


【解决方案1】:

我建议您尝试长轮询策略,该策略已在之前的线程中讨论过:long polling in objective-C。 也看看这个TCP-based RPC server (Erlang or something similar?) for iOS/Android app communication

【讨论】:

  • 不幸的是,没有服务器支持长轮询策略(它不在我们的控制之下)。服务器只是在每个请求上返回一个状态 JSON。我将更新问题以澄清这一点。
  • 好吧,在这种情况下,我想除了不断地轮询 Web 服务之外,您无能为力。只需以“适度的方式”进行,就像您说的那样,在每次民意调查之间等待一段时间并进行最大次数。另一种方法是创建一种外观类型的 web 服务,它执行烦人的轮询部分,例如,您可以使用套接字进行通信以避免来自应用程序本身的轮询。只是一个想法,可以让您摆脱 iOS 应用程序的轮询。
  • 在Android上方便系统执行(如收音机开启、批量网络请求等)时有一个way to schedule polling task。是否有可能在 iOS 上做类似的事情?
猜你喜欢
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 2010-09-20
  • 2014-07-07
  • 2011-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多