|
| Дата |
|
USD/RUB | 93.4409 | BTC/USD | 66471.4368 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
11.10.2009, 16:20
|
#1
|
Ниибаца крутой програмер
Регистрация: 04.08.2009
Сообщений: 904
Бабло: $177555
|
асинхронные сокеты и форки
подскажите плз пример скриптов для мультизапросов с использованием асинхронных сокетов и форков
можно самый простой вариант, дальше сам буду дорабатывать
|
|
|
11.10.2009, 19:28
|
#2
|
Senior Member
Регистрация: 14.02.2008
Адрес: Омск
Сообщений: 215
Бабло: $28640
|
Обычно это взаимоисключающие подходы.. Оба достигают одного результата.
fork более требователен к процессору и памяти, асинхронные сокеты сложнее в программировании.
Для асинхронных сокетов кури хелп curl_multi
Вот пример: http://ru2.php.net/manual/en/functio...multi-exec.php
|
|
|
11.10.2009, 19:48
|
#3
|
Профи Интернет коммерции
Регистрация: 04.04.2007
Сообщений: 2,344
Бабло: $456535
|
есть пиздатый класс multicurl.class.php
я попросил автора подделать его и он пиздато работает
800 запросов на 1 мбите со скачкой страниц при 25 потоков выполняет за 200 секунд.
Код:
// а тут мы обрабатываем полученные данные
class MyMultiCurl extends MultiCurl {
protected function onLoad($url, $content, $info) {
echo $content; // контент
echo $url; // урл
echo $info; // техническая информация хедеры и тд
}}
try {
$mc = new MyMultiCurl();
$mc->setMaxSessions(25); // limit 2 parallel sessions (by default 10)
foreach($allkeys as $val){
$val = trim($val);
$q = $val;
$postvars[CURL_REFERRER] = тут рефка к примеру массивом;
$mc->addUrl("Запросим хуету тут с Http",$postvars);
$cc++;
if(($cc % 300) == 0) echo "<br>";
echo ".";
flush();
}
//забиваем класс потоками всеми к примеру из файлика 800 запросов и ждем mc->wait
$mc->wait();
}
catch (Exception $e) {
echo "Something wrong with $url, please check -> ".$e->getMessage();
}
|
|
|
11.10.2009, 19:49
|
#4
|
Профи Интернет коммерции
Регистрация: 04.04.2007
Сообщений: 2,344
Бабло: $456535
|
у меня винда поетому не ахти - на линуксах думаю в разы быстрее на 10 мегабитах
секунд за 20-30 справиться 800 запросов
|
|
|
11.10.2009, 20:10
|
#5
|
Ниибаца крутой програмер
Регистрация: 04.08.2009
Сообщений: 904
Бабло: $177555
ТС -->
|
ТС
Цитата:
Сообщение от Dippa
|
я имел ввиду два скрипта
мультикурл есть
причём тут кстати курл к сокетам ? курл это ж вроде как обвёртка для сокетов, я думал что асинхронные сокеты это как то отдельно от курла и более низкоуровнево, с точки зрения протоколов
|
|
|
11.10.2009, 20:29
|
#6
|
Senior Member
Регистрация: 14.02.2008
Адрес: Омск
Сообщений: 215
Бабло: $28640
|
Цитата:
Сообщение от qazxcvbnm
причём тут кстати курл к сокетам ? курл это ж вроде как обвёртка для сокетов, я думал что асинхронные сокеты это как то отдельно от курла и более низкоуровнево, с точки зрения протоколов
|
К асинхронным сокетам асинхронная обвёртка curl_multi)
Низкоуровнево сейчас сам уже никто не пишет, кроме хацкеров канешна
|
|
|
11.10.2009, 20:52
|
#7
|
Ниибаца крутой програмер
Регистрация: 04.08.2009
Сообщений: 904
Бабло: $177555
ТС -->
|
ТС
мда, крутой ты програмер
|
|
|
11.10.2009, 21:24
|
#8
|
ChefJavaProgrammierer
Регистрация: 05.04.2007
Сообщений: 1,165
Бабло: $15090
|
Цитата:
Сообщение от Dippa
К асинхронным сокетам асинхронная обвёртка curl_multi)
Низкоуровнево сейчас сам уже никто не пишет, кроме хацкеров канешна
|
В свое время руками писал на асинхронных под пхп без курла, выгода одна - по памяти эффективнее. можешь сокеты читать, какие готовы, и на ходу распарсивать. а курла когда натыкается на чей-нибудь хани-пот, в котором 5 мб ссылок на порно и фентермин, начинает тупить и задрючивать память сильно.
намного проще параллельная работа со скачкой веба реализуется на яве, извините за постоянный пиар, есть готовые классы и паттерны, которые хоть в один поток, хоть в 1000 работают.
|
|
|
11.10.2009, 22:10
|
#9
|
hustle
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
|
форки
PHP код:
<?php
// простой пример без заморочек
$sites = array("http://google.com", "http://google.ru", "http://google.es", "http://google.it", "http://google.com.ua", "http://google.de", "http://google.ch", "http://google.com.ua", "http://yahoo.com", "http://msn.com", "http://digg.com", "http://mixx.com", "http://twitter.com" );
$i = 0;
foreach ($sites as $domain) { $pid=pcntl_fork(); if ($pid) { $ar = file_get_contents($domain); echo "Site $domain: ".$ar."\r\n\r\n"; $handle = fopen("files/$i.tmp", "w"); fwrite($handle, $ar); break; } $i = $i + 1; }
?>
|
|
|
11.10.2009, 22:25
|
#10
|
Профи Интернет коммерции
Регистрация: 04.04.2007
Сообщений: 2,344
Бабло: $456535
|
мультикурл класс довел руками сам не хуяя на ханипоты не рвется можно указать скачал 128 кбайт и рви связь
|
|
|
|