Всея ПЫХА epsyl adw0rd Мавр ГО Irinax http://hell.helldude.ru - это пиздец

Вкусное. PhpDudeMassRequest class. Версия 0.1 beta.

Рубрики: (php, phpdude.ru, Полезные штуки, Утилиты) Автор: phpdude 11-11-2008

Теги : , , , , , , , , , , ,

привет все, чувствую флейм тут всех заебал уже.

попробуем выложить что нить полезное.

я хз знаете ли вы про эти возможности curlБ если знаете – молодцы, если нет, увы я не открыл для вас чтото новое.

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

навеяно темой http://forum.searchengines.ru/showthread.php?t=284959

тут автор как раз говорит о том, что он хуеет от скорости загрузки рсс фидов, ибо у него это порядка 15 чтоли секунд. всякие мудаки предлагают ему писать на си и говне перле. эти люди просто знают про пхп на уровне file_get_contents + substr. и часто любят вопить, что пхп – ни хуя не язык. короче оффтоп в сторону. речь пойдет о curl_multi_init функции. может вы ее и знаете, но не пользовалась, может даже пользовались :) )) суть в том, что достаточно хуево пользоваться этой функцией в виде

// create both cURL resources
$ch1 = curl_init();
$ch2 = curl_init();

// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);

//create the multiple cURL handle
$mh = curl_multi_init();

//add the two handles
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);

$running=null;
//execute the handles
do {
curl_multi_exec($mh,$running);
} while (
$running > 0);

//close the handles
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);

?>

это нормально если надо всего лишь 2 параллельных запроса сделать, а если их надо сделать полтысячи?
короче суть этой штуки в том, что можно создать набор дескрипторов с помощью curl_init, потом положить их в curl_multi_init дескриптор и выполнять exec пока есть активные закачки. получем, что время скачивания 500 рсс лент = времени максимально долго скачиваемой ленты, естественно это условие при неограниченности канала связи сервера.
мое решение тут.
$mr = new MassRequest();
foreach($part as $v)
{
$mr->addUrl($v['link']);
}
$mr->fetch();

foreach($part as $v)
{
$lastparsedlink = «»;
$feed->parse($mr->getContent($v['link']));

сначала мы добавляем addUrl пачку урлов для скачивания, потом вызываем фетч, который не завершится, пока все данные не будут скачаны. ну а дальше получаем контент по урлу. приятнее использовать чем стандартный предложенный метод на пхп.нет.
PhpDudeMassRequest class. Версия 0.1 beta.
первый раз, ну и собственно для моего друга американца James’а был написан этот класс в свое время, впервые был использован тут
http://seopro.com.au/free-seo-tools/link-checker/
до внедрения этого класса время проверки обратных ссылок составляло порядка 10 минут, после внедрения этого лкасса + упрощения некоторых вещей ну и адаптации под работу класса врмея проверки 100 ссылок составляет порядка 20 секунд. как сейчас работает я не знаю честно, давно с ним не общался :)
опробуйте, скажите нравится ли вам решение :) надеюсь нравится.

Комментарии RSS тут:

Всего отзывов: 23 на Вкусное. PhpDudeMassRequest class. Версия 0.1 beta.

Оставьте свой отзыв

XHTML: Вы можете использовать следующие теги:

О САЙТЕ

Крик души может быть будет на этом сайте, а может и будет что-нибудь другое :)



Яндекс.Метрика