Se uma requisição assíncrona expirar antes de abrir uma conexão, verifique os limites ativos do transporte além dos tempos limite de rede. O libcurl enfileira transferências quando esses limites estão ocupados, e os orçamentos de tempo limite continuam enquanto estão na fila.

Para o handler cURL multi compartilhado do 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),
]);

Use este cliente para o trabalho assíncrono e forneça a opção de proxy pretendida nas operações. Os valores são orçamentos de exemplo. Para requisições públicas permitidas por um intermediário público, a lista de proxies HTTP oferece candidatos para as URLs de proxy das operações.

OpçãoOrçamento
MAX_TOTAL_CONNECTIONSConexões abertas simultaneamente sob o handler múltiplo
MAX_HOST_CONNECTIONSConexões para um único host/porta; as conexões de proxy contam contra o endpoint do proxy
MAXCONNECTSConexões retidas no cache após o uso

Vários sites que usam o mesmo proxy não recebem automaticamente cotas separadas de conexões de proxy. A capacidade do cache ocioso não abre conexões antecipadamente nem as torna intercambiáveis: a reutilização depende de rota, destino, protocolo e autenticação.

Mantenha o orçamento de tarefas da aplicação e qualquer cota do provedor coerentes com estes orçamentos de transporte. Eles contam conexões, não requisições por segundo. Aumentar o tempo limite do socket não identifica se uma fila ou uma espera de rede consumiu o tempo.

Artigos relacionados