PHP 运行 无需等待响应的后台作业非阻塞模式如触发器类型

PHP Running Background jobs without waiting for response Non Blocking mode Like Trigger type

Objective

我的基本 objective 是使用 Yii2 Web 应用程序在 PHP 中实现异步触发器

我需要 运行 php 批处理作业,但我不想在 浏览器/cron 中等待完成作业。 对于 运行 宁的工作,我需要使用我的应用程序的不同文件,如

http://myapp/foojob.php 

foojob.php 应该根据手头的可用作业异步调用许多 php 个实例[每个实例执行一个作业]。调用的时间限制 (foojob.php) 小于 60sec.i 需要在超过超时值之前触发新的 php 实例。

我推荐并尝试过

  1. curl_multi - 我在其中找不到非阻塞模式。
  2. fsock_open - 这可以通过发送 Connection: Close 来实现(但是 fsock open 在许多共享主机服务器上并不总是可用,或者它不能正常工作)。你能给我推荐任何可靠的 fsock 传输解决方案吗?
  3. pcntl_exec - 我没有实时尝试过,但实时统计显示 45% 的服务器禁用了该功能。我不知道为什么。
  4. 流传输 - 我不知道它是如何工作的?

我的问题:

  1. 非阻塞异步请求 git 中是否已经存在任何可能的解决方案以实现 PHP?
  2. 如果我需要查看任何其他交通工具,请联系我
  3. 有没有基于环境的智能切换传输机制(curl/fsock)?

编辑:

该应用程序是自托管产品。它将在各种托管服务上工作。共享主机不允许/为其客户提供任何外部扩展。

您可以采取一种方法,发送正确的 headers 让浏览器关闭连接,然后 运行 进程同步进行,这对最终用户来说似乎是异步的。

这是我很久以前写的东西,你可以看看它作为例子。 http://www.phpclasses.org/package/8388-PHP-Defer-execution-of-actions-until-the-script-ends.html

我假设 yii 中有一些地方,您可以在发送内容后挂钩,在那里您可以做类似的事情。

它的简短版本 header("Content-Length: ".$length); header("Connection: Close");

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

doWork();

我已经为非阻塞后台作业编写了一个 php 库。该库将有助于实现我发布的 objective

作曲家图书馆 https://packagist.org/packages/devbabuind/non-blocking-php