Se una richiesta asincrona scade prima di aprire una connessione, controlla i limiti attivi del trasporto oltre ai timeout di rete. libcurl mette in coda i trasferimenti quando questi limiti sono occupati, e i relativi budget di timeout continuano mentre sono in coda.

Per l'handler cURL multi condiviso di 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),
]);

Usa questo client per il lavoro asincrono e fornisci la sua opzione proxy prevista sulle operazioni. I valori sono budget di esempio. Per le richieste pubbliche consentite tramite un intermediario pubblico, l'elenco di proxy HTTP fornisce candidati per gli URL proxy delle operazioni.

OpzioneBudget
MAX_TOTAL_CONNECTIONSConnessioni aperte contemporaneamente sotto l'handler multiplo
MAX_HOST_CONNECTIONSConnessioni verso un solo host/porta; le connessioni proxy contano sull'endpoint del proxy
MAXCONNECTSConnessioni mantenute nella cache dopo l'uso

Diversi siti web che usano lo stesso proxy non ricevono automaticamente quote separate di connessioni proxy. La capacità della cache inattiva non apre connessioni in anticipo né le rende intercambiabili: il riutilizzo dipende da percorso, destinazione, protocollo e autenticazione.

Mantieni il budget delle attività dell'applicazione e l'eventuale quota del provider coerenti con questi budget di trasporto. Contano connessioni, non richieste al secondo. Aumentare il timeout del socket non può stabilire se è stata una coda o un'attesa di rete a consumare il tempo.

Articoli correlati