2013-04-15 5 views
0

У меня есть php-скрипт (в обычной среде LAMP), который выполняет несколько домашних заданий в конце скрипта.php: данные заподлицо и конечное клиентское соединение

Я использую flush(), чтобы выталкивать все данные клиенту, который работает нормально (страница полностью загружена), но браузер все еще ждет данных (обозначенных «загрузкой» -анимации), что запутывает пользователь, но, конечно, ясно, потому что Apache не может знать, будет ли PHP генерировать больше выходных данных после flush() - в моем случае это никогда не будет.

Есть ли способ сообщить клиенту, что выход завершен, и http-соединение должно быть немедленно закрыто, даже если скрипт продолжает работать?

ответ

0

Похоже, у вас есть длинный скрипт, выполняющий различные задачи. Особенно кажется, что скрипт продолжает делать что-то после того, как он отправил ответ клиенту. Это дизайн, который открывает множество потенциальных проблем. Вы должны пересмотреть свою архитектуру.

Непрерывно разделяйте задачи по поддержанию дома и общение с клиентами. Например, вы могли бы обработать клиентский запрос и вызвать внутренние вспомогательные запросы (которые вы можете отсоединить) или перевести задачи в систему типа cron. Затем предложите второй взгляд клиенту, который визуализирует ход и результат этих задач. Такой подход намного безопаснее, гибче и проще при необходимости расширяться. И ваша проблема решена тоже :-)

0

Вы можете использовать эту функцию для выполнения запроса и очистки всех данных, продолжая делать что-то отнимающее много времени (преобразование видео, обработка статистики и т. Д.); http://php.net/manual/en/install.fpm.php, но для этого вам необходимо установить FPM как

<?php 
echo "You can see this from the browser immediately.<br>"; 
fastcgi_finish_request(); 
sleep(10); 
echo "You can't see this form the browser."; 
?> 
Смежные вопросы