Как динамически добавлять дополнительные запросы в пул Guzzle?

Я использую Guzzle (http://guzzlephp.org), чтобы получить большое количество URL-адресов (~ 300 КБ). URL-адреса извлекаются из экземпляра Elastic Search, и я хотел бы продолжать добавлять URL-адреса в пул, чтобы пул оставался довольно маленьким, а не добавлял их все сразу.

Это возможно? Я посмотрел на Pool.php, но не нашел способа сделать это. Есть ли способ?

3

Решение

Используйте while и generator (yield).

$client = new GuzzleHttp\Client();

$client = new Client();

$requests = function () {
$uris = ['http://base_url'];
$visited_uris = []; // maybe database instead of array

while(len($uris)>0)
yield new Request('GET', array_pop($uris));
}
};

$pool = new Pool($client, $requests(), [
'concurrency' => 5,
'fulfilled' => function ($response, $index) {
$new_uri = get_new_uri(); // implement function to get new $uri
if(in_array($new_uri, $visited_uris)) {
array_push($uris, $uri);
}

array_push($visited_uris, $uri);
}
]);

$promise = $pool->promise();
$promise->wait();
1

Другие решения

смотреть на http://mtdowling.com/blog/2014/09/28/guzzle-ring/, в «Отправка запросов одновременно» раздел.

Вы можете использовать генератор для добавления запросов во время их отправки пулом Guzzle.

0

По вопросам рекламы [email protected]