Вызов AJAX для проверки состояния запущенного процесса в фоновом режиме, тайм-аут - PullRequest
2 голосов
/ 07 октября 2011

Я искал ответ на этот вопрос и не смог его найти, надеюсь, кто-то может указать мне правильное направление, я думаю, что я близок

У меня есть два хозяинадавайте назовем их host1.mydomain.com и host2.mydomain.com (чтобы обойти 2 одновременных соединения на хост / браузер), так что они оба указывают на одно и то же содержимое, одно из которых является просто псевдонимом другого

Пользователь заходит на host1.mydomain.com, вводит некоторую информацию для регистрации, нажимает кнопку Go, которая загружает iframe на той же странице, указывающую на страницу на host2.mydomain.com, которая вызывает скрипт php через exec ("curl")отправляя запрос в фоновый режим для запуска скребка веб-сайта, идентификатор процесса затем сохраняется в базе данных для пользователя.После успешной загрузки iframe (занимает всего 1 секунду с момента создания фонового процесса) у меня установлен интервал AJAX-запроса для периодической проверки состояния процесса cURL (по его идентификатору процесса в базе данных), чтобы я мог отобразитьтекущий шаг скребка (всего 6 шагов).Пока все хорошо.

Проблема в том, что запросы AJAX задерживаются после шага 4 скребка (время ожидания браузера по умолчанию составляет 115/120 секунд), хотя это не должно быть, потому что я работаю сдва разных хоста ... то есть почти как если бы я не засорял оба соединения на host1.mydomain.com, потому что я инициировал скребок с host2

iframe загружает этот URL:http://host2.mydomain.com/page.php Содержимое скрипта PHP вызывает:

exec("curl -o /dev/null 'http://host2.mydomain.com/page.php?method=process' > /dev/null & echo $!", $op);

Затем мой запрос ajax опрашивает http://host1.mydomain.com/status.php?pid=x, который просматривает базу данных, чтобы проверить состояние по идентификатору процесса

и как только скребок перейдет к шагу 4, мои ajax-запросы истекают

Я думаю, что запутался, объясняя это, но, надеюсь, кто-то может мне помочь

Ответы [ 2 ]

3 голосов
/ 11 октября 2011

Оказывается, я успешно обошел ограничение 2 подключений на сервер / браузер ... однако, проводя некоторые исследования, я обнаружил, что мой ajax-запрос завис, потому что я пытался получить доступ и записать данные сеанса из оба запроса. Покопавшись немного глубже, я нашел session_write_close (), который закрывает сеанс для чтения / записи. Мне нужно вызывать его после каждого запроса страницы скребка, а затем повторно инициализировать сеанс, это позволяет моим ajax-запросам проходить и останавливает блокировку. запроса.

Надеюсь, кто-то найдет это полезным, если вы наткнетесь на ту же проблему

Ура! Джефф

1 голос
/ 11 октября 2011

Вместо ожидания завершения запроса вы должны создать новый процесс , который работает в фоновом режиме на сервере. И используйте JavaScript, чтобы «проверять» каждые несколько секунд, чтобы увидеть, когда выполнение завершилось. Тогда все, что вам нужно сделать, это взять результат и отобразить его.

Кроме того, вы можете убедиться, что порождается только один процесс php.

...