Индикатор выполнения AJAX – опрос, комета?
Вопрос
Хотелось бы получить совет, как реализовать следующее:
Я хотел бы информировать своих пользователей о ходе выполнения задачи, выполняемой на моем сервере через AJAX.Мой сервер запускает PHP-скрипт, который загружает файл с помощью команды оболочки, используя функцию popen.Он периодически отображает/печатает происходящее.Я хотел бы захватить этот вывод с помощью AJAX и представить его пользователю.
В другом вопросе мне сказали, что мне, возможно, придется использовать опрос или комету?Я был бы очень признателен за любую помощь или рекомендации о том, как добиться этого самым простым и эффективным способом.Надеюсь, я все еще смогу использовать JQuery.
Спасибо всем, что нашли время прочитать это.
P.S.Мне удалось зайти так далеко благодаря сообществу stackoverflow. :)
Решение
Это звучит как прекрасная возможность для Длинный опрос Аякса, который является одним из множества методов, используемых в общих реализациях Comet.Есть еще один вопрос по переполнению стека с примером кода.
Другие советы
Ссылка, которую разместил Джим Пулс, — отличное место для начала.Многие пользователи, задававшие эти вопросы, предлагают много полезной информации об опросах Comet и PHP.В большинстве мест, которые я видел, для выполнения этой задачи рекомендуется использовать Python Twisted.
Также вот несколько ссылок:
Адаптивные приложения AJAX с COMET
И еще одна статья о шаблонах AjAx для потоковой передачи HTTP
Я бы, вероятно, пошел по маршруту gs, упомянутому в конце, в зависимости от того, насколько «необходим» индикатор выполнения.Если это просто функция, помогающая пользователю понять, что обработка занимает немного больше времени, чем обычно, то «обмануть» его оценкой намного проще, чем живой опрос.
Я бы просто использовал обычный опрос вместо Comet, так как это больше похоже на хак.Чтобы сделать пользовательский интерфейс более гибким, вы можете изменять и обновляйте индикатор выполнения, не сверяясь с сервером, просто рассчитав среднее время, необходимое для выполнения задачи.Вы можете исправить ошибку, запросив правильный статус.Если вы это хорошо реализуете, все подумают, что это живое обновление.