Een Guzzle-verzoek kan een time-out krijgen terwijl het op een verbindingsslot wacht
Stel de actieve verbindingsbudgetten van cURL multi in op de gedeelde handler en onderscheid ze van de capaciteit van de lege cache.
Als een asynchroon verzoek verloopt voordat een verbinding wordt geopend, controleer dan de actieve limieten van het transport en ook de netwerktime-outs. libcurl zet overdrachten in de wachtrij wanneer die limieten bezet zijn, en hun time-outbudgetten lopen door terwijl ze in de wachtrij staan.
Voor de gedeelde cURL multi-handler van 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),
]);Gebruik deze client voor het asynchrone werk en geef de bedoelde proxyoptie op de bewerkingen. De waarden zijn voorbeeldbudgetten. Voor openbare verzoeken die via een openbare tussenpartij zijn toegestaan, biedt de HTTP-proxylijst kandidaten voor de proxy-URL's van de bewerkingen.
| Optie | Budget |
|---|---|
| MAX_TOTAL_CONNECTIONS | Gelijktijdig geopende verbindingen onder de multi-handler |
| MAX_HOST_CONNECTIONS | Verbindingen naar één host/poort; proxyverbindingen tellen tegen het proxy-eindpunt |
| MAXCONNECTS | Verbindingen die na gebruik in de cache blijven |
Meerdere websites die dezelfde proxy gebruiken, krijgen niet automatisch aparte proxyverbindingsquota. De capaciteit van de lege cache opent niet vooraf verbindingen en maakt ze ook niet uitwisselbaar: hergebruik hangt af van route, bestemming, protocol en authenticatie.
Houd het taakbudget van de applicatie en een eventueel providerquota in overeenstemming met deze transportbudgetten. Ze tellen verbindingen, niet verzoeken per seconde. Een socket-time-out verhogen kan niet vaststellen of een wachtrij of een netwerkwartetijd de tijd heeft verbruikt.