Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否有一种方法可以异步请求第三方API,但在10秒后继续主线程_Php_Laravel_Asynchronous_Guzzle - Fatal编程技术网

Php 是否有一种方法可以异步请求第三方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, ])

事情是这样的,我想请求API,但有时需要很长时间,所以我将超时设置为10秒,这在一段时间内运行良好。但是现在我想知道每个请求的确切执行时间。我考虑的是异步请求:

$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,那么您将获得无限时间