Что является причиной частой поврежденной / неполной загрузки с Amazon CDN на устройства iOS? - PullRequest
2 голосов
/ 26 августа 2011

Я упомянул устройства Amazon CDN и iOS, потому что я не уверен, какая часть является виновником.

Я размещаю файлы jpg и PDF в Amazon CDN. У меня есть приложение для iOS, которое загружает большое количество файлов jpg и PDF в очередь. Я пытался использовать dataWithContentOfURL и ASIHttpRequest, но я получаю тот же результат. ASIHttpRequest по крайней мере дает обратный вызов, чтобы указать, что есть проблема с загрузкой, поэтому я могу заставить его повторить попытку.

Но это случается очень часто. Из 100 файлов обычно 1-5 файлов должны быть загружены повторно. Если я проверяю размер файла, он меньше исходного размера файла и не может быть открыт. Поврежденные файлы обычно отличаются каждый раз.

Я пробовал это на другом провайдере и в сети. Это то же самое.

Есть ли конфигурация, которую я пропустил в Amazon CDN, или есть что-то еще, что я пропустил в iOS doWnload? Не рекомендуется ли ставить в очередь большое количество файлов для скачивания?

Ответы [ 2 ]

0 голосов
/ 26 августа 2011

Вы можете попытаться уменьшить количество одновременных загрузок:

ASIHTTPRequest.sharedQueue.maxConcurrentOperationCount = 2;

Это меняет очередь ASIHTTPRequest по умолчанию - если вы используете свою очередь, задайте для нее значение.

По умолчанию установлено значение 4, что превышает предел, рекомендуемый RFC HTTP 1.1 при использовании постоянных соединений и когда весь контент находится на одном сервере.

0 голосов
/ 26 августа 2011

Я бы не стал загружать более 3 или 4 предметов одновременно на iPhone.Независимо от ограничений реализации (в любом случае ASIHTTPRequest вполне прилично) или возможности перегрузки диска, вы должны написать код для случая использования 3G, если ваше приложение явно не помечено (например, с настройкой Info.plist), что для него требуется Wi-Fi.Fi.

В самом ASIHTTPRequest существует решение, позволяющее сделать эти операции последовательными, а не параллельными.Добавьте ваши ASIHTTPRequest объекты к ASINetworkQueue (тот, который возвращается [ASINetworkQueue queue], подойдет).Они будут выполняться один за другим.

Обратите внимание, что при возникновении каких-либо ошибок все запросы в очереди будут по умолчанию отменены, если вы не установите для shouldCancelAllRequestsOnFailure для очереди NO.

РЕДАКТИРОВАТЬ: Я только что заметил, что вы уже упоминали об использовании очереди загрузки.Поэтому я подозреваю, что это скорее проблема на другом конце, чем на вашем устройстве.Соединения могут прерываться по разным причинам: параметр keep-alive слишком короткий, ресурсы сервера слишком малы, поэтому время ожидания истекло, некоторая часть физического соединения между сервером и магистралью Интернета периодически прерывается.Однако, чтобы быть уверенным, вам, вероятно, нужно протестировать свое приложение на нескольких устройствах, чтобы убедиться, что оно постоянно терпит неудачу на всех них, чтобы действительно сказать это.

...