Запит Guzzle може завершитися за тайм-аутом, поки чекає слот з'єднання
Задайте активні ліміти з'єднань cURL multi на спільному обробнику та відрізняйте їх від ємності простого кешу.
Якщо асинхронний запит завершується за тайм-аутом до відкриття з'єднання, перевірте активні ліміти транспорту, а також мережеві тайм-аути. libcurl ставить передачі в чергу, коли ці ліміти зайняті, і їхні бюджети тайм-ауту продовжують іти, поки вони в черзі.
Для спільного обробника cURL multi у Guzzle 7:
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Handler\CurlMultiHandler;
$multi = new CurlMultiHandler([
'options' => [
CURLMOPT_MAX_TOTAL_CONNECTIONS => 24,
CURLMOPT_MAX_HOST_CONNECTIONS => 4,
],
]);
$client = new Client([
'handler' => HandlerStack::create($multi),
]);Використовуйте цей клієнт для асинхронної роботи й передайте його передбачену опцію проксі в операціях. Значення — прикладні бюджети. Для публічних запитів, дозволених через публічного посередника, список HTTP-проксі дає кандидатів для проксі-URL операцій.
| Опція | Бюджет |
|---|---|
| MAX_TOTAL_CONNECTIONS | Одночасно відкриті з'єднання під multi-обробником |
| MAX_HOST_CONNECTIONS | З'єднання до одного хоста/порту; проксі-з'єднання враховуються проти кінцевої точки проксі |
| MAXCONNECTS | З'єднання, що зберігаються в кеші після використання |
Кілька сайтів, що використовують один проксі, не отримують автоматично окремих квот на проксі-з'єднання. Ємність простого кешу не відкриває з'єднання заздалегідь і не робить їх взаємозамінними: повторне використання залежить від маршруту, призначення, протоколу та автентифікації.
Тримайте бюджет завдань застосунку та будь-яку квоту постачальника узгодженими з цими транспортними бюджетами. Вони рахують з'єднання, а не запити за секунду. Збільшення тайм-ауту сокета не дає змоги визначити, черга чи мережеве очікування витратили час.