gpt4 book ai didi

php - 使用 GuzzleHttp REST API 客户端在 PHP 中进行非阻塞调用

转载 作者:可可西里 更新时间:2023-11-01 01:00:15 24 4
gpt4 key购买 nike

我想使用 PHP 库 GuzzleHttp 进行非阻塞 REST API 调用。

  1. 我有一个 REST API 服务器 (http://api.example.com/v1/wait)
  2. wait 方法不执行任何操作,除了 sleep(10)
  3. 我正在使用 future 参数从 PHP CLI 运行以下命令:
$client = new \GuzzleHttp\Client;
$response = $client->get('http://api.example.com/v1/wait', [
'future' => true,
'body' => [
'some' => 'var'
],
]);
echo 'OK';

我希望“OK”会立即回显,而无需等待 REST API 调用完成。相反,执行会暂停 10 秒 - 即 REST wait() 方法中的 sleep() 持续时间。

根据 Guzzle 文档:

You can send asynchronous requests by setting the future request option to true

我对调用完成回调不感兴趣,我只想给 API 一些(可能是缓慢的)任务来处理并继续生活。

我也试过 cURL 自己的 multirequest 和其他几个库——结果是一样的。执行被阻止,等待来自 API 服务器的响应。

那么,可能是什么问题?

谢谢!

最佳答案

即使使用 cURL 原生“多线程”,最长执行时间也将是完成最长查询所需的时间,因此 PHP 将等待最新的无论如何查询。这里的非阻塞术语是在当前脚本的术语中(例如一次有 5 个非阻塞请求,但它们都将在这个脚本中完成)。换句话说,除非所有请求至少报告 smth,否则脚本不会离开它们。

可能的解决方案是 pcntl_fork 启动一些单独的线程 来完成您的任务,无需等待它 完成。由于不受控制的 fork ,存在所谓的僵尸进程,但您可以根据自己的情况试一试,因为。它不是永远运行的进程(aka worker)。

这里是 one of the many关于 pcntl_fork 方法的文章。

关于php - 使用 GuzzleHttp REST API 客户端在 PHP 中进行非阻塞调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29539572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com