【发布时间】:2014-11-26 12:43:29
【问题描述】:
我使用 iOS Background FETCH n Background TRANSFER 来更新我们的应用。
当我们下载 MP4 作为大量文件的一部分时,下载可能会突然停止并出现错误:
'客户端在收到整个响应之前关闭连接'
http代码还是200。
由于公司蜂窝帐户,我们对数据没有限制,并且我们的 iPad 上只有一个应用程序,因此管理层希望我们在全新安装时下载更多数据和文件数量超过 20/30。 它们是每天发布的企业视频/pdf。
我创建了一个 NSURLSession
NSURLSession * backgroundSession_ = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:identifier]
然后对于每个指向 mp4 或 PDF 的 URL,我从我的 NSURLSession 创建一个 NSURLSessionDownloadTask
NSURLSessionDownloadTask * downloadTask_ = [backgroundSession_ downloadTaskWithURL:url_];
每个下载任务的启动恢复。 当所有返回 NSURLSession 完成时,我会在通知中告诉用户应用程序已更新。
我在我的 Mac 上使用 CHARLES PROXY 来监控下载。 这需要一段时间,因为有很多文件,而且我注意到电影似乎在流式传输,所以可能很慢。 通常它会检查已下载的内容,并且只下载最新的,但如果我进行大量下载,则说是干净安装,我注意到安静的流向 mp4 的流经常被杀死。 他们有 200 个代码,但带有消息
'客户端在收到整个响应之前关闭连接'
知道是什么原因造成的,因为它可以阻止我的 NSURLSession 完成,因此我的同步可能会处于挂起状态。
图像:OK 下载:电影流并保存到磁盘:200:完成
图片:下载突然停止:
任何想法:我使用后台获取,因此不确定消息中的客户端是 iOS8 还是我的应用程序。 在每个下载任务返回后,我将 tmp 文件复制到文档中的 mp4 并调用
[session finishTasksAndInvalidate];
如果其中一些下载任务失败,那么我注意到会话永远不会完成并卡住。 当我再次获取时,我会得到所有这些旧下载任务和旧会话。
【问题讨论】:
-
您找到解决此问题的方法了吗?我想知道这是否是 Charles-Bug,因为我在这里遇到了完全相同的问题......
-
两年前,但根据我代码中的评论,我公司超时 - 请参阅下面的答案
-
太棒了!我去看看!
标签: ios8 nsurlsession nsurlsessiondatatask