NSURLSession 准确设置请求超时

NSURLSession set request timeout accurately

我们通过NSMutableURLRequest timeoutInterval为请求设置超时间隔。正如 Apple 的文档所述,它指定了 数据包之间的限制 ,而不是整个请求。当我们分析我们的请求日志时,一些超时请求超过了我们设置为 timeoutInterval 的秒数。我们需要准确地超时请求。

通过阅读文档和博客,NSURLSessionConfiguration中的timeoutIntervalForRequest属性与timeoutInterval相同。但是 timeoutIntervalForResource 属性 似乎符合我们的要求。

然而,Mattobjc.io 中说 timeoutIntervalForResource 应该只真正用于后台传输 ”。可以在正常请求中使用吗?比如查询用户信息。在这种情况下合适吗?

非常感谢。

可以使用,但这样做很少有意义。

iOS 应用的预期用户体验是,当用户要求下载或查看某些基于 Web 的资源时,抓取应该继续,retrying/resuming 根据需要,直到用户明确表示取消它。

就是说,如果您正在谈论获取用户未请求的内容,或者如果您正在获取您可以没有的其他可选数据,添加资源超时可能没问题。不过,我不确定您为什么要费心取消它。毕竟,如果您已经花费了网络带宽来下载一半的数据,让它完成可能是有意义的,否则时间就被浪费了。

相反,如果适用,最好让任何 UI 超时,但继续获取请求并缓存它。这样,下次用户执行会导致类似提取发生的操作时,您就已经拥有了数据。

我能想到的唯一例外是获取视频片段或类似的东西,如果花费的时间太长,您需要中止传输并切换到不同的、质量较低的流。但在大多数应用程序中,这应该由 iOS 本身的 HLS 支持来处理,因此您不必管理它。