@incontumaciam

PHP как распараллелить запросы?

Есть сервер Apache + PHP + MySQL
На нем скрипт store.php который принимает данные GET и пишет в базу с периодичностью 5-10раз в секунду. Так же на этом VirtualHost есть "долгие" скрипты которые могут отрабатывать больше минуты (file_get_contents() - чтение данных из rest/api с чужого сервиса).
Получается "долгие" скрипты блокируют основной thread и данные который должны заноситься в базу станут в очередь.
Но для мониторинга мне необходимо чтоб данные заносились в базу как только отправляются (с небольшой задержкой).
Как сделать чтобы "долгие" запросы, которые только ждут ответ не занимали процесс? Если я перенесу их на новый VirtualHost у них будет свой php процесс? Что можно сделать в рамках одного VirtualHost?
  • Вопрос задан
  • 812 просмотров
Пригласить эксперта
Ответы на вопрос 3
@AlikDex
блокируются скрипты одной сессии
делай примерно так
<?php
passthru("/usr/bin/php /path/to/script.php ".$argv_parameter." >> /dev/null 2>&1 &");
?>

или заменить на exec. Суть в том, чтобы запустить процесс и отвязаться от него. Можно еще еще покопать thread'ы, но сам не сталкивался с ними.
Ответ написан
Комментировать
@skyfortress
Может стоит использовать PHP-FPM?
Ответ написан
Комментировать
elevenelven
@elevenelven
Php Dev @ Amadeus
Можете глянуть в сторону Gearman.
Если коротко, то вы создаёте в скрипте запрос на выполнение определенной работы и передаёте его работнику (который уже и будет её делать минуту), а сам скрипт потратит на это секунду. Следующую работу он отдаст другому свободному рабочему.
Очень удобно. Хотя требует некоторого вклада в инфраструктуру.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы