En Guzzle-anmodning kan timeout, mens den venter på en forbindelsesplads
Angiv cURL multis aktive forbindelsesbudgetter på den delte handler, og skel dem fra den ledige caches kapacitet.
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.
| Indstilling | Budget |
|---|---|
| MAX_TOTAL_CONNECTIONS | Samtidigt åbne forbindelser under multi-handleren |
| MAX_HOST_CONNECTIONS | Forbindelser til én vært/port; proxyforbindelser tælles mod proxyendepunktet |
| MAXCONNECTS | Forbindelser, 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.