This is part of a new series of articles aimed at giving instant responses to common questions. Find out more.
All the snippets make 10 requests to a fake API that takes 3 seconds to reply.
On my computer, multiple executions of these scripts ran in a little more than 3 seconds.
You can configure how many simultaneous connections to make in each client.
Using Symfony’s HTTPClient
Installation
$ composer require symfony/http-client
Example
$client = new \Symfony\Component\HttpClient\CurlHttpClient([], 10);
$responses = [];
for ($i = 0; $i < 10; ++$i) {
$responses[] = $client->request('GET', 'http://slowwly.robertomurray.co.uk/delay/3000/url/https://jsonplaceholder.typicode.com/todos/1');
}
foreach ($responses as $response) {
$content = $response->getContent();
}
Using Guzzle
Installation
$ composer require guzzlehttp/guzzle:^7.0
Example
$client = new \GuzzleHttp\Client();
$responses = [];
$generator = function ($total) use ($client) {
for ($i = 0; $i < $total; $i++) {
yield function() use ($client) {
return $client->getAsync('http://slowwly.robertomurray.co.uk/delay/3000/url/https://jsonplaceholder.typicode.com/todos/1');
};
}
};
$pool = new \GuzzleHttp\Pool($client, $generator(10), [
'concurrency' => 10,
'fulfilled' => function (\GuzzleHttp\Psr7\Response $response, $index) use (&$responses) {
$responses[$index] = $response->getBody()->getContents();
},
]);
$promise = $pool->promise();
$promise->wait();
Any comments? Send me a tweet. 🐸