PHP Запуск фоновых заданий без ожидания ответа Неблокирующий режим, такой как тип триггера


Цель

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

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

http://myapp/foojob.php 

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

Я ссылался и пытался

  1. curl_multi - я не мог найти в нем неблокирующий режим.
  2. fsock_открыть - Это возможно путем отправки соединения: Близко к вызову (но fsock open не всегда доступен на многих серверах общего хостинга или работает неправильно). Можете ли вы предложить мне какое-либо надежное решение с помощью fsock транспорт?
  3. pcntl_exec - Я не пробовал в режиме реального времени, но статистика в реальном времени показывает, что 45 % серверов отключили эту функцию. Я не знаю причины этого.
  4. потоковый транспорт - Я не знаю, как это работает?

Мои вопросы:

  1. Неблокирующие асинхронные запросы Есть ли какое-либо возможное решение, которое уже существует в git для достижения в PHP?
  2. Направьте меня, если мне нужно будет изучить какие-либо другие транспортные средства
  3. является существует ли какой-либо интеллектуальный механизм переключения транспорта (curl/fsock), основанный на окружающей среде?

Изменить:

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

Author: Babu, 2016-10-18

2 answers

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

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

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

Краткая версия заголовка it ("Длина содержимого:".$длина); заголовок ("Соединение: Закрыть");

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

doWork();
 1
Author: matthewdaniel, 2016-10-18 14:18:38

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

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

 0
Author: Babu, 2017-01-04 11:50:30