Wenn eine asynchrone Anfrage abläuft, bevor eine Verbindung geöffnet wird, prüfen Sie die aktiven Grenzwerte des Transports sowie Netzwerk-Zeitüberschreitungen. libcurl stellt Übertragungen in die Warteschlange, wenn diese Grenzwerte belegt sind, und ihre Zeitbudgets laufen während des Wartens weiter.

Für den gemeinsamen cURL-multi-Handler von 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),
]);

Verwenden Sie diesen Client für die asynchrone Arbeit und übergeben Sie seine vorgesehene Proxy-Option an den Operationen. Die Werte sind Beispielbudgets. Für öffentliche Anfragen, die über einen öffentlichen Vermittler erlaubt sind, liefert die HTTP-Proxy-Liste Kandidaten für die Proxy-URLs der Operationen.

OptionBudget
MAX_TOTAL_CONNECTIONSGleichzeitig offene Verbindungen unter dem Multi-Handler
MAX_HOST_CONNECTIONSVerbindungen zu einem Host/Port; Proxy-Verbindungen zählen gegen den Proxy-Endpunkt
MAXCONNECTSVerbindungen, die nach der Nutzung im Cache bleiben

Mehrere Websites, die denselben Proxy nutzen, erhalten nicht automatisch getrennte Proxy-Verbindungskontingente. Die Kapazität des Leerlauf-Caches öffnet weder Verbindungen im Voraus noch macht sie sie austauschbar: Die Wiederverwendung hängt von Route, Ziel, Protokoll und Authentifizierung ab.

Halten Sie das Aufgabenbudget der Anwendung und ein etwaiges Anbieterkontingent mit diesen Transportbudgets im Einklang. Sie zählen Verbindungen, nicht Anfragen pro Sekunde. Ein höheres Socket-Timeout kann nicht feststellen, ob eine Warteschlange oder eine Netzwerkwartezeit die Zeit verbraucht hat.

Ähnliche Artikel