curl — PHP выполняет фоновые задания без ожидания ответа Режим неблокирования Как тип триггера

Моя основная цель — получить асинхронные триггеры в PHP с помощью веб-приложения Yii2

Мне нужно запустить пакетные задания php, но я не хочу ждать в браузер / cron для выполнения работы.
Для запуска работы мне нужно использовать другой файл моего приложения, например

http://myapp/foojob.php

Файл foojob.php должен асинхронно вызывать множество экземпляров php [Каждый экземпляр несет одно задание] на основе имеющихся доступных заданий. Ограничение времени вызова (foojob.php) составляет менее 60 с. Мне нужно запускать новые экземпляры php до того, как оно превысит значение тайм-аута.

  1. curl_multi — я не мог найти неблокирующий режим в нем.
  2. fsock_open — Это возможно, отправив Connection: Close to call (но функция fsock open не всегда доступна на многих серверах общего хостинга или работает неправильно). Можете ли вы предложить мне надежное решение с помощью транспорта fsock?
  3. pcntl_exec -Я не пробовал в реальном времени, но статистика показывает, что 45% серверов отключили эту функцию. Я не знаю причину почему.
  4. потоковый транспорт — Я не знаю, как это работает?
  1. Неблокирующие асинхронные запросы Есть ли какое-либо возможное решение, которое уже существует в git для достижения в PHP?
  2. Направьте меня, если какие-либо другие транспорты мне нужно посмотреть в
  3. Есть ли интеллектуальный механизм переключения транспорта (curl / fsock) в зависимости от среды?

Приложение является самостоятельным продуктом. Было бы получить работу на различные услуги хостинга. Общий хостинг не позволяет / Предоставляет какие-либо внешние расширения для своих клиентов.

6

Решение

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

Вот то, что я написал давным-давно, что вы можете увидеть в качестве примера.
http://www.phpclasses.org/package/8388-PHP-Defer-execution-of-actions-until-the-script-ends.html

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

Короткая версия этого
заголовок («Content-Length:». $ length);
заголовок («Соединение: Закрыть»);

ob_flush(); // headers
echo $html;
flush();

doWork();
1

Другие решения

Я написал одну библиотеку php для неблокирующих фоновых заданий. Эта библиотека поможет достичь поставленной цели

Библиотека композитора
https://packagist.org/packages/devbabuind/non-blocking-php

0

По вопросам рекламы [email protected]