【问题标题】:Session Configuration Time Out interval not able to set greater than 60 seconds会话配置超时间隔无法设置为大于 60 秒
【发布时间】:2019-08-02 20:09:21
【问题描述】:

在我的应用程序中,我从服务器获取的数据非常繁重,并且在单个 API 中以批量数据的形式出现。 因此,我将超时间隔增加到 1800 秒。 我的代码是

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:@"com.mobiletuts.Singlecast.BackgroundSession"];
        // Session Configuration
        [sessionConfiguration setTimeoutIntervalForRequest:30*60];
        // Initialize Session
        session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:self delegateQueue:nil];

NSMutableURLRequest* request = [[[NSURLRequest alloc] initWithURL:[NSURL URLWithString:fdi.downloadSource]] mutableCopy];
    request = [CommonFunctions AddRequestHeaders:request];
    [request setTimeoutInterval:30*60];
    fdi.downloadTask = [self.session dataTaskWithRequest:request];
    [fdi.downloadTask resume];

即使我的会话显示超时 1800 秒,但我在 60 秒后收到请求超时。 如何增加等待时间以免请求超时?

【问题讨论】:

    标签: ios nsurlconnection nsurlrequest nsurlsessiondownloadtask nsurlsessionconfiguration


    【解决方案1】:

    简短回答?你不能,也不应该尝试。

    当 iOS 设备在与您的服务器建立开放连接的情况下等待数据时,其网络硬件(Wi-Fi 或蜂窝网络)会启动,使用宝贵的电池电量。因此,在等待数据到达时,您可以将硬件保持热状态的时间是有限的。

    在您的情况下,您的服务器在超过一分钟的时间内都没有发送一个字节的数据。期望 HTTP/HTTPS 请求在如此长的不活动期间保持活动状态是不合理的。

    此外,通过蜂窝连接,随着连接持续时间的增加,实际接收数据的几率接近于零,因为您可以切换到不同的塔,从 3G 切换到 LTE 或反之亦然,经历一段时间的大量丢包这会导致连接失败等。因此,即使这不是对电池电量的巨大浪费和对共享蜂窝塔带宽的巨大浪费,仍然保持蜂窝电话也不是特别实用链接在不传递任何数据时运行。

    因此,如果您的服务器确实运行了 60 多秒而没有发送一个字节的数据,那么您需要彻底重新考虑您的处理方式,并将请求拆分为两个调用:

    • 生成数据 - 告诉服务器开始处理数据,以便为您的应用下载做好准备。
    • 检索数据 - 询问服务器数据是否已准备好,如果已准备好,则检索它(并且可以选择清除它,或通过单独的请求执行此操作)。

    发出第一个请求,然后定期发出第二个请求(比如每分钟一次),直到它真正返回数据。

    不要忘记添加某种服务器端脚本来清除在一段时间(一天、一周等)后尚未声明的任何生成数据,这样它就不会只是堆积永远向上。

    如果您不希望您的服务器在如此长的时间内不发送任何数据,那么您应该花一些时间找出服务器端出了什么问题。

    【讨论】:

      猜你喜欢
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2012-02-28
      相关资源
      最近更新 更多