Моя основная цель — получить асинхронные триггеры в PHP с помощью веб-приложения Yii2
Мне нужно запустить пакетные задания php, но я не хочу ждать в браузер / cron для выполнения работы.
Для запуска работы мне нужно использовать другой файл моего приложения, например
http://myapp/foojob.php
Файл foojob.php должен асинхронно вызывать множество экземпляров php [Каждый экземпляр несет одно задание] на основе имеющихся доступных заданий. Ограничение времени вызова (foojob.php) составляет менее 60 с. Мне нужно запускать новые экземпляры php до того, как оно превысит значение тайм-аута.
Приложение является самостоятельным продуктом. Было бы получить работу на различные услуги хостинга. Общий хостинг не позволяет / Предоставляет какие-либо внешние расширения для своих клиентов.
Вы можете использовать подход, при котором вы отправляете правильные заголовки, чтобы браузер закрывал соединение, а затем запускал процесс синхронно, и это могло бы показаться асинхронным для конечного пользователя.
Вот то, что я написал давным-давно, что вы можете увидеть в качестве примера.
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();
Я написал одну библиотеку php для неблокирующих фоновых заданий. Эта библиотека поможет достичь поставленной цели
Библиотека композитора
https://packagist.org/packages/devbabuind/non-blocking-php