2

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

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

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

我在不同的 ISP 和网络上试过这个。一样的。

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

4

2 回答 2

0

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

ASIHTTPRequest.sharedQueue.maxConcurrentOperationCount = 2;

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

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

于 2011-08-26T07:44:50.930 回答
0

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

其自身存在一种解决方案,ASIHTTPRequest以使这些操作是顺序的,而不是并发的。将您的ASIHTTPRequest对象添加到一个ASINetworkQueue(返回的对象[ASINetworkQueue queue]会很好)。他们将一个接一个地被处决。

请注意,如果您遇到任何错误,默认情况下,队列上的所有请求都将被取消,除非您将队列设置shouldCancelAllRequestsOnFailureNO.

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

于 2011-08-26T01:49:49.287 回答