iOS中用于轮询有关任务完成的Web服务的最佳实践

时间:2013-04-10 07:50:49

标签: ios web-services long-polling polling

假设我们有一个与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秒限制一次请求的轮询策略,那么Apple会拒绝该应用吗?

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

我们正在努力避免使用推送通知,因为这些请求是一种低级别任务,用户无需明确参与。

1 个答案:

答案 0 :(得分:2)

我建议您尝试使用Long Polling策略,这在以前的主题中已经讨论过:long polling in objective-C。  另请查看此TCP-based RPC server (Erlang or something similar?) for iOS/Android app communication