Pool
in package
Параллельное выполнение независимых запросов на базе `curl_multi`.
Выполняет запросы одновременно, но не более concurrency за раз, освобождая
слот сразу по завершении очередного обмена. Перед добавлением каждый запрос
проходит защиту от SSRF. Возвращает карту «ключ → PoolResult», где
результат каждого запроса независим: сбой одного не прерывает остальные.
Пул выполняет по одному обмену на запрос (без авто-перенаправлений и повторов) — это низкоуровневый примитив пропускной способности; для полного конвейера применяйте Client::send().
Функции curl_* и curl_multi_* вызываются без указания пространства имён —
в тестах их можно подменить, не выходя в сеть.
Table of Contents
Methods
- __construct() : mixed
- acceptServerPush() : $this
- Принимать ресурсы HTTP/2 server push.
- add() : $this
- Добавить запрос с явным ключом.
- addRequest() : $this
- Добавить запрос с автоматическим числовым ключом.
- concurrency() : int
- Максимум одновременных запросов.
- isIdle() : bool
- Нет ли ни очереди, ни незавершённого неблокирующего прогона.
- send() : array<string|int, PoolResult>
- Выполнить все запросы и вернуть результаты.
- stream() : Generator<string|int, PoolResult>
- Выполнять запросы и выдавать результаты по мере готовности.
- tick() : array<string|int, PoolResult>
- Выполнить один неблокирующий шаг обмена и вернуть готовые результаты.
Methods
__construct()
public
__construct([int $concurrency = 10 ][, CurlConfigurator $configurator = new CurlConfigurator() ][, SsrfGuard $guard = new SsrfGuard() ][, Redactor|null $redactor = null ]) : mixed
Parameters
acceptServerPush()
Принимать ресурсы HTTP/2 server push.
public
acceptServerPush([callable(string, array<string, string>): bool|null $filter = null ]) : $this
Сервер может заранее протолкнуть ресурсы, связанные с запросом (стили к
странице, связанные сущности к ответу API), сэкономив круговые задержки.
Принятый ресурс выдаётся отдельным результатом с ключом push:<URL>.
Push с другого источника (схема, хост, порт), чем у исходного запроса,
отклоняется всегда; остальные — по решению фильтра.
Parameters
- $filter : callable(string, array<string, string>): bool|null = null
-
решение по URL и заголовкам push-запроса (
null— принимать все)
Return values
$this —этот же пул
add()
Добавить запрос с явным ключом.
public
add(int|string $key, Request $request) : $this
Parameters
- $key : int|string
-
ключ результата
- $request : Request
-
запрос
Return values
$this —этот же пул
addRequest()
Добавить запрос с автоматическим числовым ключом.
public
addRequest(Request $request) : $this
Parameters
- $request : Request
-
запрос
Return values
$this —этот же пул
concurrency()
Максимум одновременных запросов.
public
concurrency() : int
Return values
int —предел конкурентности
isIdle()
Нет ли ни очереди, ни незавершённого неблокирующего прогона.
public
isIdle() : bool
Return values
bool —true, если пул простаивает
send()
Выполнить все запросы и вернуть результаты.
public
send() : array<string|int, PoolResult>
Очередь запросов потребляется: после вызова пул пуст и готов к новому набору запросов, а прежние результаты не переносятся в следующий прогон.
Return values
array<string|int, PoolResult> —карта «ключ → результат»
stream()
Выполнять запросы и выдавать результаты по мере готовности.
public
stream() : Generator<string|int, PoolResult>
Генератор отдаёт пары «ключ → PoolResult» в порядке завершения
обменов, не накапливая все ответы в памяти: обработанный результат можно
сразу отпустить. Досрочный выход из цикла (break) корректно освобождает
незавершённые дескрипторы. Очередь запросов потребляется.
Return values
Generator<string|int, PoolResult> —результаты по мере завершения
tick()
Выполнить один неблокирующий шаг обмена и вернуть готовые результаты.
public
tick() : array<string|int, PoolResult>
Для встраивания в event loop (ReactPHP, Amp/Revolt, таймеры Swoole):
вызывайте периодически, пока Pool::isIdle() не вернёт true.
Шаг не ждёт сеть — передаёт данные, которые уже готовы, и сразу
возвращает управление циклу. Запросы, добавленные во время прогона,
выполняются следующим прогоном.
Tags
Return values
array<string|int, PoolResult> —результаты, завершившиеся на этом шаге