Php 是否有一种方法可以异步请求第三方API,但在10秒后继续主线程
事情是这样的,我想请求API,但有时需要很长时间,所以我将超时设置为10秒,这在一段时间内运行良好。但是现在我想知道每个请求的确切执行时间。我考虑的是异步请求:Php 是否有一种方法可以异步请求第三方API,但在10秒后继续主线程,php,laravel,asynchronous,guzzle,Php,Laravel,Asynchronous,Guzzle,事情是这样的,我想请求API,但有时需要很长时间,所以我将超时设置为10秒,这在一段时间内运行良好。但是现在我想知道每个请求的确切执行时间。我考虑的是异步请求: $requestPromise = $client->requestAsync($this->getMethod(), $this->getEndpoint(), [ 'form_params' => $this->payload, 'http_errors' => false, ])
$requestPromise = $client->requestAsync($this->getMethod(), $this->getEndpoint(), [
'form_params' => $this->payload,
'http_errors' => false,
])->then(function (Response $response) {
Log::debug("request success:", ["response" => $response->getBody()->getContents()]);
$this->response = $response;
});
$requestPromise->wait();
但问题是,主要流程必须等待响应,我不想这样做。有没有办法等待响应不超过10秒,然后释放主进程,而不终止发出请求的第二个进程?“因此我将超时设置为10秒”哪个超时?请求超时或服务器响应请求的超时时间?如果第一种情况是这样的:代码中看到了什么?“但是现在我想知道每个请求的确切执行时间。”你能不能在开始请求之前创建一个时间戳,然后在请求完成后创建另一个时间戳,然后再创建另一个时间戳?“有没有办法等待不超过10秒的响应“你看了吗?@DefinitelynotRafal第一个?”。我可以这样做,但是主PHP进程将忙于等待响应?在
$requestPromise=…
之前创建一个新的时间戳,并在Log::debug(…)之前创建一个新的时间戳代码>然后计算差异?“是否有办法等待响应不超过10秒,然后释放主进程”如果您需要函数外部的变量,那么您需要等待它完成使用非异步请求。There is on_stats可以为您提供每个请求的执行时间,我认为您实际上没有充分利用它的潜力,如果您将timeout request options设置为0,那么您将获得无限时间