Заявка на Guzzle може да изтече, докато чака слот за връзка
Задайте активните бюджети за връзки на cURL multi на споделения handler и ги разграничете от капацитета на неактивния кеш.
Ако асинхронна заявка изтече, преди да отвори връзка, проверете активните лимити на транспорта, както и мрежовите таймаути. libcurl поставя трансферите на опашка, когато тези лимити са заети, и техните бюджети за таймаут продължават, докато са на опашката.
За споделения cURL multi handler на 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),
]);Използвайте този клиент за асинхронната работа и подайте предвидената му прокси опция към операциите. Стойностите са примерни бюджети. За публични заявки, разрешени през публичен посредник, списъкът с HTTP проксита предоставя кандидати за прокси URL адресите на операциите.
| Опция | Бюджет |
|---|---|
| MAX_TOTAL_CONNECTIONS | Едновременно отворени връзки под multi handler-а |
| MAX_HOST_CONNECTIONS | Връзки към един хост/порт; прокси връзките се отчитат към прокси крайната точка |
| MAXCONNECTS | Връзки, запазени в кеша след употреба |
Няколко сайта, използващи един и същ прокси, не получават автоматично отделни разрешения за прокси връзки. Капацитетът на неактивния кеш нито отваря връзки предварително, нито ги прави взаимозаменяеми: повторното използване зависи от маршрут, дестинация, протокол и удостоверяване.
Поддържайте бюджета на задачите на приложението и всяко разрешение от доставчик в съответствие с тези транспортни бюджети. Те броят връзки, а не заявки в секунда. Увеличаването на таймаута на сокета не може да покаже дали опашка или мрежово изчакване е изразходвало времето.