mirror of
https://github.com/guzzle/guzzle.git
synced 2025-02-24 18:13:00 +01:00
62 lines
1.8 KiB
PHP
62 lines
1.8 KiB
PHP
<?php
|
|
/*
|
|
* Runs a performance test against the node.js server for both serial and
|
|
* parallel requests. Requires PHP 5.5 or greater.
|
|
*
|
|
* # Basic usage
|
|
* make perf
|
|
* # With custom options
|
|
* REQUESTS=100 PARALLEL=5000 make perf
|
|
*/
|
|
|
|
require __DIR__ . '/bootstrap.php';
|
|
|
|
use GuzzleHttp\Client;
|
|
use GuzzleHttp\Tests\Server;
|
|
use GuzzleHttp\Ring\Client\CurlMultiAdapter;
|
|
use GuzzleHttp\Pool;
|
|
|
|
// Wait until the server is responding
|
|
Server::wait();
|
|
|
|
// Get custom make variables
|
|
$total = isset($_SERVER['REQUESTS']) ? $_SERVER['REQUESTS'] : 1000;
|
|
$parallel = isset($_SERVER['PARALLEL']) ? $_SERVER['PARALLEL'] : 100;
|
|
|
|
$client = new Client(['base_url' => Server::$url]);
|
|
|
|
$t = microtime(true);
|
|
for ($i = 0; $i < $total; $i++) {
|
|
$client->get('/guzzle-server/perf');
|
|
}
|
|
$totalTime = microtime(true) - $t;
|
|
$perRequest = ($totalTime / $total) * 1000;
|
|
printf("Serial: %f (%f ms / request) %d total\n",
|
|
$totalTime, $perRequest, $total);
|
|
|
|
// Create a generator used to yield batches of requests
|
|
$reqs = function () use ($client, $total) {
|
|
for ($i = 0; $i < $total; $i++) {
|
|
yield $client->createRequest('GET', '/guzzle-server/perf');
|
|
}
|
|
};
|
|
|
|
$t = microtime(true);
|
|
Pool::send($client, $reqs(), ['parallel' => $parallel]);
|
|
$totalTime = microtime(true) - $t;
|
|
$perRequest = ($totalTime / $total) * 1000;
|
|
printf("Batch: %f (%f ms / request) %d total with %d in parallel\n",
|
|
$totalTime, $perRequest, $total, $parallel);
|
|
|
|
$adapter = new CurlMultiAdapter(['max_handles' => $parallel]);
|
|
$client = new Client(['adapter' => $adapter, 'base_url' => Server::$url]);
|
|
$t = microtime(true);
|
|
for ($i = 0; $i < $total; $i++) {
|
|
$client->get('/guzzle-server/perf');
|
|
}
|
|
unset($client);
|
|
$totalTime = microtime(true) - $t;
|
|
$perRequest = ($totalTime / $total) * 1000;
|
|
printf("Future: %f (%f ms / request) %d total\n",
|
|
$totalTime, $perRequest, $total);
|