如何动态地向Guzzle Pool添加额外的请求?

时间:2014-11-03 14:32:22

标签: php guzzle

我正在使用Guzzle(http://guzzlephp.org)获取大量网址(~300k)。从Elastic Search实例中检索网址,我想继续将网址添加到池中,以便池保持相当小而不是一次性添加所有网址。

这可能吗?我查看了Pool.php,但没有办法做到这一点。有办法吗?

2 个答案:

答案 0 :(得分:2)

使用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 :(得分:0)

在" 同时发送请求"中查看http://mtdowling.com/blog/2014/09/28/guzzle-ring/部分。

您可以使用生成器在Guzzle池发送请求时添加请求。