会话配置超时间隔不能设置大于60秒

问题描述 投票:0回答:1

在我的应用程序中,我从服务器获取的数据非常繁重,并且在单个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个回答
1
投票

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

当iOS设备等待与您的服务器打开连接的数据时,其网络硬件(Wi-Fi或蜂窝电话)将使用宝贵的电池电源启动。因此,在等待数据到达时,您可以将硬件保持多长时间存在限制。

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

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

因此,如果您的服务器确实在没有发送单个数据字节的情况下持续60秒以上,那么您需要完全重新考虑您的工作方式,并将请求分成两个调用:

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

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

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

如果您不希望服务器在这么长的时间内没有发送任何数据,那么您应该花一些时间来弄清楚服务器端的错误。

© www.soinside.com 2019 - 2024. All rights reserved.