从 Amazon CDN 到 iOS 设备的频繁下载损坏/不完整的原因是啥?

Posted

技术标签:

【中文标题】从 Amazon CDN 到 iOS 设备的频繁下载损坏/不完整的原因是啥?【英文标题】:What is the cause of frequent corrupted/incomplete download from Amazon CDN to iOS devices?从 Amazon CDN 到 iOS 设备的频繁下载损坏/不完整的原因是什么? 【发布时间】:2011-11-04 04:09:47 【问题描述】:

我提到了 Amazon CDN 和 ios 设备,因为我不确定哪个部分是罪魁祸首。

我在 Amazon CDN 中托管 jpg 和 PDF 文件。 我有一个 iOS 应用程序,可以在队列中下载大量 jpg 和 PDF 文件。我曾尝试使用 dataWithContentOfURL 和 ASIHttpRequest,但我得到了相同的结果。 ASIHttpRequest 至少给出了一个回调,表明下载有问题,所以我可以强制它重试。

但是这种情况经常发生。在 100 个文件中,通常需要重新下载 1-5 个文件。如果我检查文件大小,它小于原始文件大小并且无法打开。 损坏的文件通常每次都不同。

我已经在不同的 ISP 和网络上尝试过了。一样的。

是否有我在 Amazon CDN 中遗漏的配置,或者我在 iOS 下载中遗漏了其他配置?不建议排队下载大量文件吗?

【问题讨论】:

"ASIHttpRequest 至少给了一个回调,表示下载有问题,所以我可以强制它重试。" - 它报告什么错误? 【参考方案1】:

我不会在 iPhone 上一次下载超过 3 或 4 个项目。不管实现限制(ASIHTTPRequest 还是不错的)或磁盘抖动的可能性,您必须为 3G 用例编写代码,除非您的应用程序明确标记(如使用Info.plist 设置)它需要 Wi-菲。

ASIHTTPRequest 本身存在一种解决方案,可以使这些操作按顺序进行,而不是同时进行。将您的 ASIHTTPRequest 对象添加到 ASINetworkQueue[ASINetworkQueue queue] 返回的对象就可以了)。他们将一个接一个地被处决。

请注意,如果您遇到任何错误,除非您将队列的shouldCancelAllRequestsOnFailure 设置为NO,否则队列上的所有请求将默认被取消。

编辑: 我刚刚注意到您已经提到使用下载队列。因此,我怀疑这在另一端比在您的设备上更成问题。连接可能由于各种原因而中断:保持活动设置太短,服务器上的资源太少,因此超时,服务器和 Internet 主干之间的某些物理链接间歇性地出现故障。不过,可以肯定的是,您可能需要在多台设备上测试您的应用,以确保它在所有设备上始终失败,才能真正做到这一点。

【讨论】:

嗨,是的,我确实将它们排在一个线程中,所以它们是顺序的。一次只有一个文件。 我已经在多台设备上测试过了。结果相同 那一定要调查另一端。抱歉,由于我是客户端 (iOS) 开发人员,因此无法为您提供更多帮助。 谢谢。同样在这里。我也是客户端。只是想知道这是否是 iOS 端错误,尽管我非常确信不是。【参考方案2】:

您可以尝试减少并发下载的数量:

ASIHTTPRequest.sharedQueue.maxConcurrentOperationCount = 2;

这会更改默认的 ASIHTTPRequest 队列 - 如果您使用自己的队列,请改为设置该值。

默认值为 4,这高于 HTTP 1.1 RFC 在使用持久连接且所有内容都在同一服务器上时建议的限制。

【讨论】:

以上是关于从 Amazon CDN 到 iOS 设备的频繁下载损坏/不完整的原因是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Amazon SNS 时无法接收到 iOS 设备的推送通知

使用 amazon sdk 和存储桶策略从 ios 应用程序将图像上传到 amazon s3

Amazon Cloudfront - 将 CDN 域名传递到源服务器

在 iOS 设置中更改通知时,Amazon SNS 如何禁用/重新启用设备?

如何在 Node JS 中使用 Amazon SNS 向 iOS 设备发送 VoIP 推送通知

将文件推送到 Amazon Cloudfront:可能吗?