Отправить один запрос AJAX для обработки данных и получить несколько ответов PHP, обновляя ход выполнения - PullRequest
0 голосов
/ 24 августа 2011

Справочная информация:

Я пытаюсь разработать плагин экрана загрузки, который можно интегрировать в нашу мобильную мультимедийную рекламу. Некоторые из этих объявлений используют несколько изображений для анимации в стиле флипбук, поэтому что-то вроде этого было бы действительно полезно. Он должен работать на iPhone 4.0+ и Android 2.2+ и, в идеале, на Windows Phone 7.1.

То, как я кодировал загрузочные экраны в прошлом, я создавал серию объектов изображения и устанавливал в качестве источника URL-адрес изображения. Затем для каждого события onload, onerror или onabort для этого объекта я бы увеличивал процесс загрузки на 1 и отображал его на оверлее экрана загрузки.

Однако, по предложению члена команды, я проводил некоторые исследования по использованию URI данных для непосредственного кодирования данных изображений на веб-странице с использованием PHP. Единственный недостаток этого подхода - медленное открытие веб-страницы при большом количестве изображений.

Несколько дней назад я обнаружил сообщение в блоге Марка Колича , в котором он использовал data uri для кодирования серии изображений в сценарии на стороне сервера, обернул его в ответ json, а затем отправил все эти файлы изображений обратно в его веб-приложение. Однако это хорошая идея, если бы я использовал эту концепцию на своем экране загрузки, тогда прогресс загрузки увеличился бы с 0% до 100% в одном запросе ajax. В результате, если процесс загрузки занимает несколько секунд, этого может быть недостаточно для стимулирования реакции, чтобы сохранить интерес посетителя. Мне нужно показать некоторый прогресс в середине.

Чтобы сделать:

Поэтому мне нужно взять метод Марка и выяснить, как я могу сделать ответы немного более реалистичными. Я хочу сделать так, чтобы я мог отправить один AJAX-запрос со списком изображений в мой php-скрипт загрузчика и заставить мой php-скрипт отвечать на запросы множественными ответами с обновлениями каждый раз (или каждый раз, или каждый 5-й и т. Д.) Успешно закончил чтение и кодирование этих изображений.

Я понимаю, что, возможно, я слишком усложняю это; что php-скрипт будет обрабатывать эти изображения так быстро, что болтовня о коде на стороне клиента будет бессмысленной, потому что это будет сделано в кратчайшие сроки. В этом случае может иметь больше смысла имитировать процесс загрузки, связанный с этими изображениями, с помощью setTimeouts, пока не вернется ответ JSON. Или я могу быть на правильном пути, и есть определенный порог, я должен начать принимать этот подход во внимание, потому что время загрузки занимает слишком много времени.

Есть идеи? Есть примеры?

Ответы [ 2 ]

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

Как говорит @Marc B, Comet или решение WebSockets (с запасным вариантом для старых веб-браузеров), безусловно, является тем решением, которое вы ищете.

Comet может быть немного сложнее, чтобы разобратьсяи, в конечном счете, решения HTTP Streaming и HTTP Long-polling - обходные пути для HTTP.WebSockets - намного лучший подход, поскольку они стандартизированы и, на мой взгляд, становятся стандартом для двунаправленной связи в режиме реального времени между сервером и клиентом.Существует несколько решений для инфраструктуры реального времени для PHP:

Если вы предпочитаете использовать размещенный сервис, который устраняет необходимость установки и обслуживанияваша инфраструктура реального времени и особенно если вы просто хотите передавать обновления с вашего сервера на клиент (браузер на iOS, Android, WP7), когда происходит событие (когда должно отображаться новое изображение или обновляется БД и т. д.), а затем размещаетсяРешение, безусловно, является хорошим вариантом ( Примечание: я работаю на хост-провайдера решений ).

Я составил список размещенных решений здесь:

См .: Хостинг технологий реального времени

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

Попробуйте Комета . Он позволяет получать ответы, состоящие из нескольких частей, что позволяет получать эти периодические обновления, но при этом обрабатывается только один HTTP-запрос.

...