Skip to content

Instantly share code, notes, and snippets.

@stevenwadejr
Created June 28, 2018 17:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stevenwadejr/90d01b6b8b3c627291135d12849483ea to your computer and use it in GitHub Desktop.
Save stevenwadejr/90d01b6b8b3c627291135d12849483ea to your computer and use it in GitHub Desktop.
Async Guzzle
<?php
require_once 'vendor/autoload.php';
function client()
{
static $client;
$client = $client ?? new GuzzleHttp\Client;
return $client;
}
function makeRequest(int $delay)
{
echo "Making request [delay = $delay]\n";
client()->getAsync('https://mockbin.org/delay/' . $delay)
->then(function() use ($delay) {
echo "Response received [delay = $delay]\n";
})
->wait();
}
echo "Start\n";
$time = -time();
$delays = [5000, 2500, 1000, 500, 0];
foreach ($delays as $delay) {
makeRequest($delay);
}
$time += time();
echo "Finished\n";
echo sprintf('Finished in %f seconds', $time);
<?php
require_once 'vendor/autoload.php';
use GuzzleHttp\Promise\PromiseInterface;
function client()
{
static $client;
$client = $client ?? new GuzzleHttp\Client;
return $client;
}
function makeRequest(int $delay): PromiseInterface
{
echo "Making request [delay = $delay]\n";
return client()->getAsync('https://mockbin.org/delay/' . $delay)
->then(function() use ($delay) {
echo "Response received [delay = $delay]\n";
});
}
echo "Start\n";
$time = -time();
$promises = [
makeRequest(5000),
makeRequest(2500),
makeRequest(1000),
makeRequest(500),
makeRequest(0)
];
\GuzzleHttp\Promise\unwrap($promises);
$time += time();
echo "Finished\n";
echo sprintf('Finished in %f seconds', $time);
@stevenwadejr
Copy link
Author

The above outputs:

>php blocking.php
Start
Making request [delay = 5000]
Response received [delay = 5000]
Making request [delay = 2500]
Response received [delay = 2500]
Making request [delay = 1000]
Response received [delay = 1000]
Making request [delay = 500]
Response received [delay = 500]
Making request [delay = 0]
Response received [delay = 0]
Finished
Finished in 9.000000 seconds

and

>php concurrent.php
Start
Making request [delay = 5000]
Making request [delay = 2500]
Making request [delay = 1000]
Making request [delay = 500]
Making request [delay = 0]
Response received [delay = 0]
Response received [delay = 500]
Response received [delay = 1000]
Response received [delay = 2500]
Response received [delay = 5000]
Finished
Finished in 6.000000 seconds

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment