- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我遵循了本教程 Downloading files in background with URLSessionDownloadTask
还有这个苹果文档 Downloading Files in the Background
我尝试设置是因为我们有一个长期运行的 API
let config = URLSessionConfiguration.background(withIdentifier: "\(Bundle.main.bundleIdentifier!).background")
config.timeoutIntervalForRequest = 120
config.timeoutIntervalForResource = 180
但是我遇到了这个奇怪的问题:
如果服务器没有响应任何数据,则意味着
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64,totalBytesWritten: Int64,totalBytesExpectedToWrite: Int64)
根本没有被调用。
应用程序将终止之前的请求,并每 66 秒重试一个新请求。我不知道这个数字从何而来,但根据我的实验,大约是 66 秒
如果我设置了 timeoutIntervalForRequest = 10
,那么应用程序将每 10 秒重试一次请求,但任何将其设置为超过 66 秒的尝试都不起作用
不确定是否有人遇到同样的问题并找到解决方案。
请注意 1:当达到 180 秒时,整个过程将超时,并且应用程序将停止重试新请求
最佳答案
首先,这是一个错误。请在 bugreport.apple.com 上提交。超时不应该被这样忽视。当然,很有可能这是一个电源管理问题并且无法修复,所以我不会屏住呼吸。
其次,即使超时错误得到修复,您处理问题的方式也几乎肯定会导致问题。事实上,您的服务器没有发送回任何字节来保持连接处于事件状态,这当然是 iOS 设备断开连接的原因,但即使您更改了它并使其每次发送一个字节的虚假 header 直到数据准备好五秒钟,您仍然会遇到问题。
基本上,在移动设备上,您确实不应该出于任何原因对远程服务器保持长时间运行的连接。它会大量浪费电池来保持 Wi-Fi radio 持续开启,更不用说蜂窝 radio 了,更糟糕的是,当用户走出范围、切换蜂窝基站或以其他方式暂时失去连接时,连接可能随时失败。网络很糟糕——蜂窝网络更糟糕。
长时间运行的服务器处理的一个更好的方法是异步执行:
除了轮询请求两侧的几秒钟之外,这种方法避免了 radio 保持热状态,并且它使超时问题完全没有意义。
关于ios - NSURLSessionConfiguration 的 timeoutIntervalForRequest 不适用于后台 URLSession,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51062721/
如何在 Alamofire 4.0 和 swift 3.0 中设置 timeoutIntervalForRequest。 以下代码适用于我的 swift 2.2 和 Alamofire 3.0。 Al
当 session 设置为在后台工作时(通过 backgroundSessionConfiguration 调用),NSURLSessionConfiguration 的新超时属性似乎不起作用。 有人
我遵循了本教程 Downloading files in background with URLSessionDownloadTask 还有这个苹果文档 Downloading Files in th
我将 timeoutIntervalForRequest 更改为 let manager = Alamofire.SessionManager.default manager.session.conf
有了新的 NSURLSession,NSURLSessionConfiguration 对象上现在有一个 timeoutIntervalForRequest 用于创建 session 。 但是 NSU
在我们的项目中,我们使用网络管理器来使用 Alamofire 处理所有请求和响应。在 alamofire 中,我们默认的内部超时为 30。但是我们需要将某些请求的“timeoutIntervalFor
我目前正在尝试减少 iOS 应用程序中每个 Alamofire 远程调用的 NSURLSessionConfiguration 的 timeoutIntervalForRequest 和 timeou
我是一名优秀的程序员,十分优秀!