У меня есть мобильное приложение Adobe Air, которое загружается с URL-адреса, который обслуживается файлом PHP. Мой загрузчик молча завершится с ошибкой и не вернет никаких данных (используя универсальный загрузчик ИЛИ Greensock). Поэтому я сделал то, что вы в итоге сделали, просто проверив молчаливый сбой и просто повторив попытку. Это сработало, но я понял, насколько это смешно, плюс ситуация на мобильном устройстве ухудшилась, в отличие от симулятора отладки.
Вот что я нашел как исправление или, по крайней мере, значительно уменьшил количество сбоев:
Старый путь:
В моем PHP-файле я выполнял запрос к базе данных, упаковывал данные, отформатированные в XML, преобразовывал любой двоичный файл в Base64, а затем отправлял информацию заголовка с последующим echo
выводом моего заполненного XML.
Новый способ:
Я сразу же отправил информацию заголовка как можно скорее, затем сделал PHP flush();
, затем запрос к базе данных, упаковку и кодировку xml, а затем echo
из готового XML.
Пока, похоже, это исправлено, я все еще проверяю на наличие сбоев, но их МНОГО МЕНЕЕ.
Мой сервер также способен обрабатывать эти запросы, и я не собираю такого большого XML-файла, чтобы даже подумать, что он нуждается в предварительной очистке. Плюс, когда я загружаю этот URL из веб-браузера, все работает отлично, всегда. Вот почему я никогда не считал это проблемой.
Я полагаю, что причина, по которой это исправлено сейчас, заключается в том, что, посылая заголовки как можно скорее, приложение знает, что его запрос был подтвержден, и данные будут поступать. Казалось бы, http-запросы очень недолговечны для своих таймаутов (по крайней мере, в AS3), что приводит к большому количеству сбоев.