<rmcreative>

RSS

Все заметки с тегами «mystuff, curl_multi, PHP»

Можно уточнить:

    (2)
  1. Обновление Rolling Curl

    13 сентября 2010

    Обновился rolling-curl — PHP-класс для параллельного выполнения большого количества асинхронных HTTP-запросов при помощи curl, который я начал поддерживать в мае 2010.

    Пример использования можно посмотреть в анонсе библиотеки. Сегодня я остановлюсь на изменениях, сделанных в основном LionsAd, за что ему огромное спасибо.

    • Исправлена ошибка, не позволяющая перезаписать значения из конфигурации CURL по умолчанию.
    • Теперь используется curl_multi_select, что должно убрать излишнюю нагрузку на процессор.
    • В параметры обработчика теперь передаётся $request, содержащий соответствующий объект запроса.
    • Класс Request переименован в RollingCurlRequest.
    • Добавлен функционал для работы с группами запросов. Смотрите RollingCurlGroup и README.
    • Теперь можно настроить таймаут для curl_multi_select.
    • single_curl теперь возвращает true.
    • Улучшенный README с дополнениями.

    Пробуем и обновляемся

    21 комментарий
  2. rolling-curl

    13 мая 2010

    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 RollingCurlRequest($url);
        $rc->add($request);
    }
    // запускаем
    $rc->execute();

    Пользуемся

    49 комментариев