bri*_*ear 5 nsurlsession ios8 nsurlsessiondatatask
我使用 iOS Background FETCH n Background TRANSFER 来更新我们的应用程序。
当我们下载 MP4 作为大量文件的大量下载的一部分时,下载可能会突然停止并出现错误:
'客户端在收到整个响应之前关闭连接'
http代码还是200。
由于公司蜂窝帐户,我们对数据没有限制,并且我们的 iPad 上有单个应用程序,因此管理层希望我们在 20/30 的某个时候在全新安装时下载大量数据和文件数量。它们是每天发布的企业视频/pdf。
我创建了一个 NSURLSession
NSURLSession * backgroundSession_ = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier]
Run Code Online (Sandbox Code Playgroud)
然后对于每个指向 mp4 或 PDF 的 URL,我从我的 NSURLSession 创建一个 NSURLSessionDownloadTask
NSURLSessionDownloadTask * downloadTask_ = [backgroundSession_ downloadTaskWithURL:url_];
Run Code Online (Sandbox Code Playgroud)
每个下载任务上的火关闭恢复。当所有返回 NSURLSession 完成时,我会在通知中告诉用户应用程序已更新。
我在我的 mac 上使用 CHARLES PROXY 来监控下载。这需要一段时间,因为有很多文件,而且我注意到电影似乎在流式传输,因此速度可能很慢。通常它会检查已下载的内容,并且只下载最新的内容,但是如果我进行了大量下载,说要进行全新安装,我注意到安静的 mp4 流经常被杀死。他们有一个 200 代码但有消息
'客户端在收到整个响应之前关闭连接'
知道什么可能导致这种情况,因为它可以阻止我的 NSURLSession 完成,因此我的同步可以进入某种挂起状态。
图像:OK 下载:电影流并保存到磁盘:200:完成

图片:下载突然停止:

任何想法:我使用后台提取所以不确定消息中的客户端是 iOS8 还是我的应用程序。每个下载任务返回后,我将 tmp 文件复制到文档中的 mp4 并调用
[session finishTasksAndInvalidate];
Run Code Online (Sandbox Code Playgroud)
如果其中一些下载任务失败,那么我注意到会话永远不会完成并卡住。当我再次获取时,我会得到所有这些旧的下载任务和旧的会话。
有人问我是如何解决这个问题的,但两年前。
我们还缩小了电影文件以加快下载速度。我还记得会话和配置有单独的设置。我已经在其中设置了标头,但在 iOS 8/9 发布时失败了,因为它应该在会话中设置,而不仅仅是配置 - 但现在可能会随着 iOS 10 的发布而修复
//-----------------------------------------------------------------------------------
//some movie streams time out n get
//'http://stackoverflow.com/questions/23428793/nsurlsession-how-to-increase-time-out-for-url-requests'
//'Client closed connection before receiving entire response'
NSLog(@"urlSessionConfigurationBACKGROUND_.timeoutIntervalForRequest:%f", urlSessionConfigurationBACKGROUND_.timeoutIntervalForRequest);
NSLog(@"urlSessionConfigurationBACKGROUND_.timeoutIntervalForResource:%f", urlSessionConfigurationBACKGROUND_.timeoutIntervalForResource);
//was 60
//urlSessionConfigurationBACKGROUND_.timeoutIntervalForRequest = 240.0;
urlSessionConfigurationBACKGROUND_.timeoutIntervalForRequest = 600.0;
// urlSessionConfigurationBACKGROUND_.timeoutIntervalForResource = 60.0;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1879 次 |
| 最近记录: |