Я играю с guzzle и пытаюсь создать простую страницу, на которую я могу добавить свои домены, и проверить, доступны ли они в настоящее время.
В настоящее время я могу проверить, находится ли массив/список доменов в сети или он по какой-то причине отклонен. Я хотел бы также иметь возможность видеть в своем журнале / БД, сколько времени требуется от отправки HTTP-запроса на [mydomain.com] до получения ответа.
Текущий код:
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Pool;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;
if (!empty($aDomains))
{
$oClient = new Client(['expect' => false]);
$aAcceptedResponse = [];
$aRejectedResponses = [];
$aCreatedRequests = [];
foreach ($aDomains as $iDomainKey => $sDomain)
{
array_push($aCreatedRequests, new Request('GET', $sDomain));
}
$pool = new Pool($oClient, $aCreatedRequests,
[
'concurrency' => 50,
'options' => ['timeout' => 10],
'fulfilled' => function ($response, $index) use (&$aAcceptedResponse)
{
$aAcceptedResponse[] = $index;
},
'rejected' => function ($reason, $index) use(&$aRejectedResponses)
{
$aRejectedResponses[] = $index;
},
]);
$promise = $pool->promise();
$promise->wait();
}
Я подумал, что смогу найти что-то в объекте ответа на глотание, но пока мне ничего не удалось найти - я слепой или это невозможно увидеть?
ищите on_stats в документах, у него есть функция getTransferTime()
даст вам время проверить в документах
Благодаря ответу El_Vanja я понял это, просто используя глобальную метку времени:
$iStartExecutionTime = microtime(true);
$oClient = new Client(['expect' => false]);
$aAcceptedResponse = [];
$aRejectedResponses = [];
$aCreatedRequests = [];
foreach ($aDomains as $iDomainKey => $oDomain)
{
array_push($aCreatedRequests, new Request('GET', $oDomain->sDomainName));
update_domain_uptime_monitor($oDomain->iID, 1, date('Y-m-d H:i:s', strtotime('NOW')+$oDomain->iInterval), date('Y-m-d H:i:s', strtotime('NOW')));
}
$pool = new Pool($oClient, $aCreatedRequests,
[
'concurrency' => 50,
'options' => ['timeout' => 10],
'fulfilled' => function ($response, $index) use (&$aAcceptedResponse)
{
$aAcceptedResponse[$index] = (microtime(true)-$GLOBALS['iStartExecutionTime']);
},
'rejected' => function ($reason, $index) use(&$aRejectedResponses)
{
$aRejectedResponses[] = $index;
},
]);
$promise = $pool->promise();
$promise->wait();
Ответ не может содержать такую информацию, поскольку он не знает точного момента отправки запроса. Все, что другая сторона знает, это когда она получила запрос. Вы должны измерить это вручную. Это должно помочь вам начать.