rolling-curl
rolling-curl — PHP-класс для параллельного выполнения большого количества асинхронных HTTP-запросов при помощи curl, написанная Josh Fraser и поддерживаемая на данный момент мной.
Правильно чистит память, не простаивает зря, выполняя одновременно заданное число запросов. Обрабатывает каждый ответ сразу после выполнения запроса.
Пример:
// URL, которые будем обрабатывать
$urls = array(
"http://www.google.com",
"http://www.facebook.com",
"http://www.yahoo.com",
);
// функция для обработки ответа
function request_callback($response, $info) {
// получаем title страницы
if (preg_match("~<title>(.*?)</title>~i", $response, $out)) {
$title = $out[1];
}
echo "<b>$title</b><br />";
print_r($info);
echo "<hr>";
}
$rc = new RollingCurl("request_callback");
// одновременно позволим не более 20 запросов
$rc->window_size = 20;
foreach ($urls as $url) {
// добавляем запросы в очередь
$request = new Request($url);
$rc->add($request);
}
// запускаем
$rc->execute();