Я думал, что следующий код будет работать следующим образом:жрать параллельный запрос, ждать готового пакета перед отправкой следующего
- партия в количестве
CONCURRENT_REQUESTS
это отправить - он не стал ждать, пока все эти просьбы по окончанию
- следующей партии вышеуказанного числа, посылает
- и так далее
но в Реалите y, если я прокомментирую строку 14 [usleep(...)
], кажется, что пакеты запросов отправляются как можно быстрее, генерируя тысячи запросов на сервер. Можно ли его изменить? Как изменить это поведение?
<?php
$pool = $this->getPool();
if (false !== $pool) {
$pool->promise()->wait();
}
private function getPool()
{
$requests = function ($data) {
foreach ($data as $index => $datum) {
yield $this->patch($datum)->then(function (
$response
) use ($index) {
usleep(SLEEP_TIME_IN_SECONDS *1000000);
return [
'response' => $response,
'index' => $index
];
});
}
};
return new EachPromise($requests($data), [
'concurrency' => CONCURRENT_REQUESTS,
'fulfilled' => function ($response, $index) use ($data) {
// log
},
'rejected' => function ($reason, $index) use ($data) {
// do stuff
}
]);
}
private function patch($data)
{
$request = new Request(REQUEST_TYPE_PATCH, $url, $this->getPatchHeaders());
return $this->client->sendAsync($request);
}
Вы уверены, что используете обработчик CurlMulti? У вас установлен и включен cURL? Он не будет работать с StreamHandler. –