Я использовал библиотеку Guzzle, чтобы сделать несколько одновременных запросов. Код для этого:
public function concurrentRequests(array $uri)
{
$client = $this;
$requests = function ($total) use ($client, $uri) {
for ($i = 0; $i < $total; $i++) {
yield function () use ($client, $uri, $i) {
return $client->requestAsync('GET', $uri[$i]);
};
}
};
$pool = Pool::batch($client, $requests(count($uri)), [
'concurrency' => 5,
'fulfilled' => function ($response, $index) {
// this is delivered each successful response
},
'rejected' => function ($reason, $index) {
// this is delivered each failed request
},
]);
return $pool;
}
Я хочу знать, какой запрос принадлежит каждому ответу. Есть ли способ сделать это, перебирая ответы?
Это легко, потому что метод Бассейн :: партия
Возвращает массив, содержащий ответ или исключение в том же порядке, в котором были отправлены запросы.
Других решений пока нет …