【问题标题】:Guzzle asynch request not workingGuzzle异步请求不起作用
【发布时间】:2016-04-15 07:54:51
【问题描述】:

我正在使用通过 composer 安装的Guzzle,但没有做一些相对简单的事情。

我可能误解了documentation,但基本上我想要做的是向服务器运行POST 请求并继续执行代码而不等待响应。这是我所拥有的:

$client = new \GuzzleHttp\Client(/*baseUrl, and auth credentials here*/);
$client->post('runtime/process-instances', [
    'future'=>true,
    'json'=> $data // is an array
]);
die("I'm done with the call");

现在假设runtime/process-instances 运行了大约 500 万,在这 500 万用完之前我不会收到 die 消息...相反,我希望在消息 发送 到服务器。

现在我无法访问服务器,因此在运行执行之前我无法让服务器响应。我只需要忽略响应即可。

感谢任何帮助。

我尝试过的事情:

$client->post(/*blabla*/)->then(function ($response) {});

【问题讨论】:

    标签: php guzzle


    【解决方案1】:

    在 Guzzle 中不可能发送请求并立即退出。异步请求需要您等待它们完成。如果您不这样做,则不会发送请求。

    还请注意,您使用的是post 而不是postAsync,前者是同步(阻塞)请求。要异步发送 post 请求,请使用后者。在您的代码示例中,通过将post 更改为postAsync,进程将在请求完成之前退出,但目标不会收到该请求。

    【讨论】:

      【解决方案2】:

      您是否尝试过设置较低的timeout?

      【讨论】:

      • 默认不超时。
      • 我没想到。不过感觉很hacky。是否有原因导致异步无法按预期工作?还是我误解了异步功能的用途?
      • @D.Mill 在 PHP 中的异步对我来说主要是为了同时发出多个请求。
      猜你喜欢
      • 2016-10-06
      • 2022-11-28
      • 2018-02-11
      • 2017-07-09
      • 1970-01-01
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多