NSURLSession sharedSession 默认超时

Posted

技术标签:

【中文标题】NSURLSession sharedSession 默认超时【英文标题】:NSURLSession sharedSession default timeout 【发布时间】:2017-09-06 21:39:30 【问题描述】:

有人知道[NSURLSession sharedSession] 的超时配置是什么吗?

我正在做一些调试,这些信息会很有帮助。

编辑

显然我的问题不清楚(!)。我不是在问如何更改超时。我在问默认值是什么。所以这不是重复的。

【问题讨论】:

NSURLSession: How to increase time out for URL requests?的可能重复 根据文档,在默认配置下,NSURLSession 将等待长达 60 秒的新数据到达,并将允许整个操作长达 7 天(假设有新的数据至少每 60 秒)。 @KevinBallard 这个文档在哪里? [[[NSURLSession sharedSession] configuration] timeoutIntervalForRequest] 应该给你你想要的价值。 @Larme 如果您将其写为答案,我很乐意接受您的评论 【参考方案1】:

URL 会话有两个超时。第一个是接收新数据之间允许的最长时间。这称为timeoutIntervalForRequest。第二个是允许整个请求花费的最长时间(假设它定期接收新数据)。这称为timeoutIntervalForResource

默认情况下,这两个超时都使用NSURLSessionConfiguration 配置,并且可以在NSURLRequest 上被覆盖。

默认timeoutIntervalForRequest 为 60 秒。

默认timeoutIntervalForResource 为 7 天。

【讨论】:

它对我来说不是 woking 并且超时错误出现在将近 30 秒内。 即使我尝试将 timeoutIntervalForRequest 增加到 120,它仍然在控制台中显示 60。 我一定是误解了它的用途,如果对我来说它应该需要 7 天(!)超时..? @DanielSpringer 默认timeoutIntervalForResource 是 7 天,因为后台 URL 会话,其中网络请求可能会被阻止任意时间(例如,如果我处于节电状态或没有网络,后台网络请求不会发生)。对于超时时间长得离谱的前台 URL 会话无关紧要,该应用不太可能连续 7 天连续处于前台。【参考方案2】:

现在有三个超时 URL 会话。详情如下:

    timeoutInterval - 连接超时是建立初始连接的超时时间,即完成 TCP 连接握手。 如果在连接尝试期间请求保持空闲的时间超过超时间隔,则认为该请求已超时。 默认超时间隔为 60 秒。

    timeoutIntervalForRequest - 在放弃之前等待其他数据到达时使用的超时间隔。一旦新数据到达,该值就会被重置。默认值为 60。

    timeoutIntervalForResource - 如果原始请求因超时而失败,后台会话创建的任何上传或下载任务都会自动重试。要配置允许重试或传输上传或下载任务多长时间,请使用 timeoutIntervalForResource 属性。默认值为 7 天。

更多详情请参阅苹果文档:timeoutInterval、timeoutIntervalForRequest 和 timeoutIntervalForResource

【讨论】:

只加timeoutIntervalURLRequest,其余两个是URLSession

以上是关于NSURLSession sharedSession 默认超时的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发系列-NSURLSession

学习NSURLSession

NSURLSession各文件关系

iOS开发-NSURLSession

NSURLSession学习

iOS开发 GETPOST请求方法:NSURLSession篇