Асинхронные HTTP-запросы в PHP

Есть ли разумный способ сделать асинхронный HTTP-запрос на PHP без отбрасывания ответа? То есть, что-то похожее на AJAX – скрипт PHP инициирует запрос, делает это сам, а позже, когда получен ответ, функция / метод обратного вызова или другой скрипт обрабатывает ответ.

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

Да, в зависимости от трафика вашего сайта, создание отдельного процесса PHP для запуска скрипта может быть разрушительным. Было бы более эффективно использовать shell_exec () для запуска фонового процесса, который сохраняет вывод в имя файла, которое вы уже знаете, но даже это может быть ресурсоемким.

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

Если вы собираетесь использовать подход DB queue, используйте curl_multi * класс функций для отправки всех запросов в очередь сразу. Это ограничит время выполнения каждой итерации в фоновом процессе до самого длинного времени запроса.

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

Ознакомьтесь с следующей статьей: «Разработка многозадачных приложений с помощью PHP V5» от IBM DeveloperWorks. Вы можете найти его здесь http://www.ibm.com/developerworks/web/library/os-php-multitask/