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

64jmpszr  于 2023-03-20  发布在  iOS
关注(0)|答案(2)|浏览(140)

我提到亚马逊CDN和iOS设备是因为我不确定哪一部分是罪魁祸首。
我在Amazon CDN托管jpg和PDF文件,我有一个iOS应用程序,下载队列中的大量jpg和PDF文件,我尝试过使用dataWithContentOfURL和ASIHttpRequest,但我得到了相同的结果,ASIHttpRequest至少给出了一个回调,指示下载有问题,所以我可以强制它重试。
但这种情况经常发生。在100个文件中,通常有1-5个文件需要重新下载。如果我检查文件大小,它比原来的文件大小小,无法打开。损坏的文件通常每次都不一样。
我在不同的ISP和网络上试过了。都是一样的。
是我在Amazon CDN中遗漏了某个配置,还是我在iOS DOWnload中遗漏了其他什么?是否不建议对大量文件进行排队下载?

u7up0aaq

u7up0aaq1#

我不会在iPhone上一次下载超过3到4个项目。不管实现限制(ASIHTTPRequest是不错的)或磁盘抖动的可能性,你必须为3G用例编写代码,除非你的应用程序明确标记(如Info.plist设置)它需要Wi-Fi。
ASIHTTPRequest本身就有一个解决方案,可以使这些操作按顺序执行,而不是并发执行。将ASIHTTPRequest对象添加到ASINetworkQueue[ASINetworkQueue queue]返回的对象就可以了)。它们将一个接一个地执行。
请注意,如果遇到任何错误,默认情况下,队列中的所有请求都将被取消,除非您将队列的shouldCancelAllRequestsOnFailure设置为NO

  • 编辑:* 我刚刚注意到你已经提到使用下载队列。因此,我怀疑这是一个问题,在另一端比在您的设备。连接可能会下降的各种原因:keep-alive设置太短,服务器上的资源太少,导致超时,服务器和互联网 Backbone.js 之间的物理链接的某个部分间歇性地出现故障。不过,为了确保这一点,您可能需要在多台设备上测试应用,以确保它在所有设备上都持续出现故障,才能真正做到这一点。
luaexgnf

luaexgnf2#

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

ASIHTTPRequest.sharedQueue.maxConcurrentOperationCount = 2;

这将更改默认的ASIHTTPRequest队列-如果您使用自己的队列,请设置该队列的值。
默认值为4,当使用持久连接并且所有内容都在同一服务器上时,该值高于HTTP 1.1 RFC建议的限制。

相关问题