Jeśli asynchroniczne żądanie wygaśnie przed otwarciem połączenia, sprawdź aktywne limity transportu oraz limity czasu sieci. libcurl kolejkuje transfery, gdy te limity są zajęte, a ich budżety czasu biegną dalej podczas oczekiwania w kolejce.

Dla współdzielonego handlera cURL multi w 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),
]);

Użyj tego klienta do pracy asynchronicznej i podaj jego zamierzoną opcję proxy w operacjach. Wartości to przykładowe budżety. Dla żądań publicznych dozwolonych przez publicznego pośrednika lista proxy HTTP dostarcza kandydatów na adresy URL proxy operacji.

OpcjaBudżet
MAX_TOTAL_CONNECTIONSJednocześnie otwarte połączenia pod handlerem multi
MAX_HOST_CONNECTIONSPołączenia do jednego hosta/portu; połączenia proxy liczą się do punktu końcowego proxy
MAXCONNECTSPołączenia zatrzymane w cache po użyciu

Kilka witryn korzystających z tego samego proxy nie otrzymuje automatycznie oddzielnych limitów połączeń proxy. Pojemność bezczynnego cache nie otwiera połączeń z góry ani nie czyni ich wymiennymi: ponowne użycie zależy od trasy, celu, protokołu i uwierzytelniania.

Utrzymuj budżet zadań aplikacji i ewentualny limit dostawcy spójne z tymi budżetami transportu. Liczą one połączenia, a nie żądania na sekundę. Zwiększenie limitu czasu gniazda nie pozwala ustalić, czy czas zużyła kolejka, czy oczekiwanie sieciowe.

Powiązane artykuły