假设我们有一个与 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。
我们试图避免使用推送通知,因为这些请求是一种低级任务,用户不必明确参与。