Если асинхронный запрос завершается по тайм-ауту до открытия соединения, проверьте активные лимиты транспорта, а также сетевые тайм-ауты. 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Соединения, сохраняемые в кеше после использования

Несколько сайтов, использующих один прокси, не получают автоматически отдельных квот на прокси-соединения. Ёмкость простаивающего кеша не открывает соединения заранее и не делает их взаимозаменяемыми: повторное использование зависит от маршрута, назначения, протокола и аутентификации.

Держите бюджет задач приложения и любую квоту провайдера согласованными с этими транспортными бюджетами. Они считают соединения, а не запросы в секунду. Увеличение тайм-аута сокета не позволяет определить, очередь или ожидание сети израсходовали время.

Похожие статьи