Запрос 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 | Соединения, сохраняемые в кеше после использования |
Несколько сайтов, использующих один прокси, не получают автоматически отдельных квот на прокси-соединения. Ёмкость простаивающего кеша не открывает соединения заранее и не делает их взаимозаменяемыми: повторное использование зависит от маршрута, назначения, протокола и аутентификации.
Держите бюджет задач приложения и любую квоту провайдера согласованными с этими транспортными бюджетами. Они считают соединения, а не запросы в секунду. Увеличение тайм-аута сокета не позволяет определить, очередь или ожидание сети израсходовали время.