【问题标题】:Handling long network requests for iOS app处理 iOS 应用的长网络请求
【发布时间】:2018-02-28 08:00:22
【问题描述】:

我想让我的应用在从服务器获取数据出现问题时响应更快。

现在我正在使用 Reachability 库来检查对 Internet 的访问,但我认为这还不够。有时服务器可以处理很长时间的请求,甚至停机没有响应。

如果网络请求花费太多时间,我想通知用户出现问题,而不是显示无休止的活动指示器。

从哪里开始?最佳做法是什么?

【问题讨论】:

  • 您使用哪个库进行 API 调用?
  • 我现在正在使用 URLRequest 和 URLSession。但我已准备好继续前进
  • 您需要设置请求超时,所以如果响应需要很长时间,那么在特定请求超时后您的请求将自动失败并给您错误消息。

标签: ios reachability


【解决方案1】:

为 URLRequest 设置自定义超时间隔。理想情况下应该是 取决于您希望服务器发送的数据量和 服务器执行内部查询以获取数据并最终转储 与您使用的 API 相同。

尝试使用邮递员了解服务器响应时间和您收到的数据。根据该估计,您的请求的合理超时间隔。

let request = NSMutableURLRequest()
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.timeoutInterval = 20 // this is what you need to set.

然后您可以通过一些消息向用户提供消息或响应。就连接而言,您可以查看 YouTube 应用,尝试将设备置于飞行模式,您会看到显示连接状态的条带,而不会影响用户体验。

【讨论】:

    【解决方案2】:

    首先我建议在检查互联网之前添加加载,并在您从 URLRequest 收到任何内容时关闭加载。

    其次,您可以为 URLSessionConfiguration 设置自定义超时间隔,使其不会挂在那里

    仅供参考:https://developer.apple.com/documentation/foundation/urlsessionconfiguration/1408259-timeoutintervalforrequest

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 2011-07-11
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-21
      相关资源
      最近更新 更多