搜索

首页  >  问答  >  正文

objective-c - timeoutIntervalForRequest timeoutIntervalForResource 有什么区别

NSURLSessionConfiguration中有两个超时设置,一个叫timeoutIntervalForRequest 另一个是timeoutIntervalForResource,这两个有什么不同?一般在何种情况下设置?

PHPzPHPz2757 天前1774

全部回复(1)我来回复

  • 给我你的怀抱

    给我你的怀抱2017-05-02 09:40:08

    下面的这段文字:参考这里
    timeoutIntervalForRequest 和 timeoutIntervalForResource指定了请求以及该资源的超时时间间隔。许多开发人员试图使用timeoutInterval去限制发送请求的总时间,但这误会了timeoutInterval的意思:报文之间的时间。timeoutIntervalForResource实际上提供了整体超时的特性,这应该只用于后台传输,而不是用户实际上可能想要等待的任何东西。

    自己测试和理解

    在一定的情况下(timeoutInterval,timeoutIntervalForResource,timeoutIntervalForRequest)这三个值均可以触发请求超时。

    分两种情况理解,即有没有给NSURLReaqust设置timeoutInterval。

    1.如果设置了NSURLRequest timeoutInterval:
    忽略timeoutIntervalForRequest设置,以timeoutIntervalForResource、timeoutInterval较小的值为超时时间。

    2.没有设置NSURLRequest timeoutInterval:
    以timeoutIntervalForRequest、timeoutIntervalForResource较小的值为超时时间,并不是Request timeoutInterval的默认60s。

    NSURLRequest和SessionConfiguration都不设置使用默认值60s超时。

    background session模式下上传下载忽略掉timeoutIntervalForRequest和timeoutInterval的设置
    使用timeoutIntervalForResource

    NSURLRequest
    timeoutInterval-(默认60s)

    SessionConfiguration
    timeoutIntervalForRequest- (默认60s)
    timeoutIntervalForResource- (默认7天)

    @property NSTimeInterval timeoutIntervalForRequest;
    Description
    The timeout interval to use when waiting for additional data.
    This property determines the request timeout interval for all tasks within sessions based on this configuration. The request timeout interval controls how long (in seconds) a task should wait for additional data to arrive before giving up. The timer associated with this value is reset whenever new data arrives. When the request timer reaches the specified interval without receiving any new data, it triggers a timeout.
    The default value is 60.
    Important
    Any upload or download tasks created by a background session are automatically retried if the original request fails due to a timeout. To configure how long an upload or download task should be allowed to be retried or transferred, use the timeoutIntervalForResource property.
    AvailabilityiOS (7.0 and later), macOS (10.9 and later), tvOS (9.0 and later), watchOS (2.0 and later)

    @property NSTimeInterval timeoutIntervalForResource;
    描述
    资源请求应允许花费的最长时间。
    此属性根据此配置确定会话内所有任务的资源超时间隔。资源超时间隔控制放弃之前等待整个资源传输的时间(以秒为单位)。资源计时器在发起请求时启动,并计数直到请求完成或达到此超时间隔(以先到者为准)。
    默认值为 7 天。
    可用性iOS(7.0 及更高版本)、macOS(10.9 及更高版本)、 tvOS(9.0 及更高版本)、watchOS(2.0 及更高版本)

    @property NSTimeInterval timeoutInterval;
    描述
    接收者的超时间隔,以秒为单位。
    如果在尝试连接期间请求保持空闲的时间超过超时间隔,则认为请求已超时。默认超时间隔为 60 秒。
    作为一般规则,您不应使用较短的超时间隔。相反,您应该为用户提供一种简单的方法来取消长时间运行的操作。有关更多信息,请阅读网络概述中的真实世界网络设计。
    可用性iOS(8.0 及更高版本)、macOS(10.10 及更高版本)、tvOS(9.0 及更高版本)、watchOS(2.0 及更高版本)

    正常情况下设置timeoutIntervalForRequest(根据文档我觉得可以理解为请求的默认超时时间)和NSURLRequest timeoutInterval(针对单个请求设置超时时间)

    特殊情况下(后台会话模式下上传、下载)设置timeoutIntervalForResource

    回复
    0
  • 取消回复