gpt4 book ai didi

ios - session 配置超时间隔无法设置超过 60 秒

转载 作者:行者123 更新时间:2023-11-28 23:35:23 25 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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

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

因此,如果您的服务器确实运行了 60 秒以上而没有发送单个字节的数据,那么您需要完全重新考虑您的工作方式,并将请求拆分为两个调用:

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

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

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

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

关于ios - session 配置超时间隔无法设置超过 60 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55120030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com