Żądanie Guzzle może przekroczyć limit czasu, czekając na miejsce połączenia
Ustaw aktywne budżety połączeń cURL multi na współdzielonym handlerze i odróżnij je od pojemności bezczynnego cache.
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.
| Opcja | Budżet |
|---|---|
| MAX_TOTAL_CONNECTIONS | Jednocześnie otwarte połączenia pod handlerem multi |
| MAX_HOST_CONNECTIONS | Połączenia do jednego hosta/portu; połączenia proxy liczą się do punktu końcowego proxy |
| MAXCONNECTS | Połą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.