actionscript 3: загрузчики молча терпят неудачу при подверженных ошибкам соединениях - PullRequest
1 голос
/ 30 июля 2010

Наше приложение Flash должно загружать около 50 файлов из удаленного места.В нормальных условиях сети это не проблема.Однако некоторые из наших пользователей начали сообщать, что приложение «перестало работать» на этапе загрузки.

После некоторых тестов, когда мы снижали качество сети до точки, когда 1 из 3 пакетов отбрасывались пакетами, нам удалось воспроизвести сообщения об ошибках.Глядя на firebug, кажется, что несколько файлов (от 1 до 3 из 50) начинают загружаться, но никогда не завершаются.В ActionScript не возникает ошибок, и нет явного шаблона, в котором файлы не могут быть завершены.

Кто-нибудь сталкивался с ситуацией раньше и находил причину и / или решение, чтобы справиться с этими ситуациями?

Нетрудно написать что-то, что вручную проверяет, прекратили ли загрузчики загрузку и перезапустили ли процесс загрузки, но мне было интересно, если мы просто не слушаем правильные события ошибок (сейчас мы слушаем ошибки выполнения, завершения и IOErrors) или есть другие решения?

Cheers Mark

Ответы [ 6 ]

1 голос
/ 11 августа 2010

Хорошо, давно пора проследить с другого аккаунта.

Спасибо за все ваши предложения. У нас есть обходной путь, который включает перепланирование нагрузки, когда сервер не отвечает вовремя или клиент больше не получает байты в течение X времени. В худшем случае это будет означать, что пользователям придется ждать немного дольше.

Причина, по которой запросы молча терпят неудачу, все еще остается загадкой.

@ Danyal - хорошее предложение, я подозреваю, что это не так, поскольку наши погрузчики управляются, но я должен проверить, чтобы быть на 100% уверенным.

1 голос
/ 30 июля 2010

Как вы справляетесь со всей этой загрузкой?Вы просто используете Loaders (или подклассы, такие как URLLoader) или используете библиотеку, которая будет обрабатывать все это для вас?

Greensock LoaderMax и BulkLoader это то, что я использую, когда у меня есть массовая загрузка.Я только недавно начал использовать LoaderMax поверх BulkLoader из-за некоторых приятных функций, которые он имеет.

0 голосов
/ 09 июля 2012

У меня есть мобильное приложение Adobe Air, которое загружается с URL-адреса, который обслуживается файлом PHP. Мой загрузчик молча завершится с ошибкой и не вернет никаких данных (используя универсальный загрузчик ИЛИ Greensock). Поэтому я сделал то, что вы в итоге сделали, просто проверив молчаливый сбой и просто повторив попытку. Это сработало, но я понял, насколько это смешно, плюс ситуация на мобильном устройстве ухудшилась, в отличие от симулятора отладки.

Вот что я нашел как исправление или, по крайней мере, значительно уменьшил количество сбоев:

Старый путь: В моем PHP-файле я выполнял запрос к базе данных, упаковывал данные, отформатированные в XML, преобразовывал любой двоичный файл в Base64, а затем отправлял информацию заголовка с последующим echo выводом моего заполненного XML.

Новый способ: Я сразу же отправил информацию заголовка как можно скорее, затем сделал PHP flush();, затем запрос к базе данных, упаковку и кодировку xml, а затем echo из готового XML.

Пока, похоже, это исправлено, я все еще проверяю на наличие сбоев, но их МНОГО МЕНЕЕ.

Мой сервер также способен обрабатывать эти запросы, и я не собираю такого большого XML-файла, чтобы даже подумать, что он нуждается в предварительной очистке. Плюс, когда я загружаю этот URL из веб-браузера, все работает отлично, всегда. Вот почему я никогда не считал это проблемой.

Я полагаю, что причина, по которой это исправлено сейчас, заключается в том, что, посылая заголовки как можно скорее, приложение знает, что его запрос был подтвержден, и данные будут поступать. Казалось бы, http-запросы очень недолговечны для своих таймаутов (по крайней мере, в AS3), что приводит к большому количеству сбоев.

0 голосов
/ 11 августа 2010

raix , строго говоря, не является загружаемой библиотекой, имеет пример Загрузка нескольких документов XML и вывод типизированного значения , включая обработку ошибок и тайм-аутов.

Приведенный ниже код загружает документ XML и возвращается к статической версии через 10 секунд (хотя он может легко связать другую загрузку XML между ними):

Observable.xml(new URLRequest(xmlDocumentURL))
    .timeout(10000, Observable.returnValue(defaultProductCategories))
    .subscribe(function(xml : XML) : void
    {
        trace("Either way, we have an XML document");
    });
0 голосов
/ 02 августа 2010

Вы проверяли, что поддерживаете ссылки на свои загрузчики? Если вы определяете загрузчики как локальные переменные со слабыми слушателями, есть вероятность, что они могут быть собраны сборщиком мусора до завершения процесса загрузки, и ошибка будет молчать.

0 голосов
/ 30 июля 2010

Одна вещь, на которую вы, возможно, захотите взглянуть, - это то, что если вы выполняете все эти запросы сразу, они загружаются, может истечь время ожидания и ваши файлы не загружаются. Серверы часто имеют ограничения на количество одновременных запросов, которые он может обслуживать.

Поэтому рекомендуется управлять загрузкой, чтобы загружать элементы один за другим, а не запускать их все и ждать, пока они не завершатся.

...