我正在使用Guzzle 6发送并发请求,如下所示:
public function sendConcurrentRequests() {
$client = new Client(['timeout' => 5]);
$promises[] = $client->getAsync('http://example.com/1');
$promises[] = $client->getAsync('http://example.com/2');
$promises[] = $client->getAsync('http://example.com/3');
$results = Promise\unwrap($promises);
return $results;
}
每个请求可能需要 1 到 10 秒钟,但我不希望任何请求等待超过 5 秒钟(这就是为什么我设置了超时时间)。我希望的情况是:
- 请求 1、2 和 3 启动
- 请求 2 花费的时间超过 5 秒钟,因此请求被取消,并返回及时响应的请求 1 和请求 3 的响应
实际发生的情况如下: - 请求 1、2 和 3 启动 - 请求 2 花费了超过 3 秒钟,因此 unwrap 函数抛出了 ConnectException 异常,我无法得到请求 1 和请求 3 的响应。
我该如何使其正常工作,以便我可以获得及时响应的请求的有效响应?