Hvis en asynkron anmodning udløber, før den åbner en forbindelse, skal du undersøge transportens aktive grænser samt netværkstimeouts. libcurl sætter overførsler i kø, når disse grænser er optaget, og deres timeout-budgetter fortsætter, mens de står i kø.

Til Guzzle 7's delte cURL multi-handler:

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),
]);

Brug denne klient til det asynkrone arbejde, og angiv dens tilsigtede proxyindstilling på operationerne. Værdierne er eksempelbudgetter. For offentlige anmodninger, der er tilladt via en offentlig mellemled, giver HTTP-proxylisten kandidater til operationernes proxy-URL'er.

IndstillingBudget
MAX_TOTAL_CONNECTIONSSamtidigt åbne forbindelser under multi-handleren
MAX_HOST_CONNECTIONSForbindelser til én vært/port; proxyforbindelser tælles mod proxyendepunktet
MAXCONNECTSForbindelser, der beholdes i cachen efter brug

Flere websteder, der bruger den samme proxy, får ikke automatisk separate proxyforbindelsestilladelser. Den ledige caches kapacitet åbner hverken forbindelser på forhånd eller gør dem udskiftelige: genbrug afhænger af rute, destination, protokol og godkendelse.

Hold applikationens opgavebudget og enhver udbyderkvote i overensstemmelse med disse transportbudgetter. De tæller forbindelser, ikke anmodninger pr. sekund. En højere socket-timeout kan ikke afgøre, om en kø eller en netværksventetid brugte tiden.

Relaterede artikler