асинхронные сокеты и форки - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB93.4409
BTC/USD66471.4368
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 11.10.2009, 16:20   #1
qazxcvbnm
Ниибаца крутой програмер
 
Аватар для qazxcvbnm
 
Регистрация: 04.08.2009
Сообщений: 904
Бабло: $177555
По умолчанию асинхронные сокеты и форки

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

можно самый простой вариант, дальше сам буду дорабатывать
qazxcvbnm вне форума  
Старый 11.10.2009, 19:28   #2
Dippa
Senior Member
 
Регистрация: 14.02.2008
Адрес: Омск
Сообщений: 215
Бабло: $28640
По умолчанию

Обычно это взаимоисключающие подходы.. Оба достигают одного результата.
fork более требователен к процессору и памяти, асинхронные сокеты сложнее в программировании.

Для асинхронных сокетов кури хелп curl_multi
Вот пример: http://ru2.php.net/manual/en/functio...multi-exec.php
Dippa вне форума  
Старый 11.10.2009, 19:48   #3
mavook
Профи Интернет коммерции
 
Аватар для mavook
 
Регистрация: 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();
}
mavook вне форума  
Старый 11.10.2009, 19:49   #4
mavook
Профи Интернет коммерции
 
Аватар для mavook
 
Регистрация: 04.04.2007
Сообщений: 2,344
Бабло: $456535
По умолчанию

у меня винда поетому не ахти - на линуксах думаю в разы быстрее на 10 мегабитах
секунд за 20-30 справиться 800 запросов
mavook вне форума  
Старый 11.10.2009, 20:10   #5
qazxcvbnm
Ниибаца крутой програмер
 
Аватар для qazxcvbnm
 
Регистрация: 04.08.2009
Сообщений: 904
Бабло: $177555
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от Dippa Посмотреть сообщение
Обычно это взаимоисключающие подходы.. Оба достигают одного результата.


Для асинхронных сокетов кури хелп curl_multi
Вот пример: http://ru2.php.net/manual/en/functio...multi-exec.php
я имел ввиду два скрипта

мультикурл есть

причём тут кстати курл к сокетам ? курл это ж вроде как обвёртка для сокетов, я думал что асинхронные сокеты это как то отдельно от курла и более низкоуровнево, с точки зрения протоколов
qazxcvbnm вне форума  
Старый 11.10.2009, 20:29   #6
Dippa
Senior Member
 
Регистрация: 14.02.2008
Адрес: Омск
Сообщений: 215
Бабло: $28640
По умолчанию

Цитата:
Сообщение от qazxcvbnm Посмотреть сообщение
причём тут кстати курл к сокетам ? курл это ж вроде как обвёртка для сокетов, я думал что асинхронные сокеты это как то отдельно от курла и более низкоуровнево, с точки зрения протоколов
К асинхронным сокетам асинхронная обвёртка curl_multi)

Низкоуровнево сейчас сам уже никто не пишет, кроме хацкеров канешна
Dippa вне форума  
Старый 11.10.2009, 20:52   #7
qazxcvbnm
Ниибаца крутой програмер
 
Аватар для qazxcvbnm
 
Регистрация: 04.08.2009
Сообщений: 904
Бабло: $177555
ТС -->
автор темы ТС По умолчанию

мда, крутой ты програмер
qazxcvbnm вне форума  
Старый 11.10.2009, 21:24   #8
zlaya ssuka
ChefJavaProgrammierer
 
Аватар для zlaya ssuka
 
Регистрация: 05.04.2007
Сообщений: 1,165
Бабло: $15090
Отправить сообщение для zlaya ssuka с помощью ICQ
По умолчанию

Цитата:
Сообщение от Dippa Посмотреть сообщение
К асинхронным сокетам асинхронная обвёртка curl_multi)

Низкоуровнево сейчас сам уже никто не пишет, кроме хацкеров канешна
В свое время руками писал на асинхронных под пхп без курла, выгода одна - по памяти эффективнее. можешь сокеты читать, какие готовы, и на ходу распарсивать. а курла когда натыкается на чей-нибудь хани-пот, в котором 5 мб ссылок на порно и фентермин, начинает тупить и задрючивать память сильно.

намного проще параллельная работа со скачкой веба реализуется на яве, извините за постоянный пиар, есть готовые классы и паттерны, которые хоть в один поток, хоть в 1000 работают.
zlaya ssuka вне форума  
Старый 11.10.2009, 22:10   #9
Hector
hustle
 
Аватар для Hector
 
Регистрация: 02.05.2008
Адрес: 3d world
Сообщений: 12,890
Бабло: $1717315
Отправить сообщение для Hector с помощью Jabber
По умолчанию

форки

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;
}


?>
Hector вне форума  
Старый 11.10.2009, 22:25   #10
mavook
Профи Интернет коммерции
 
Аватар для mavook
 
Регистрация: 04.04.2007
Сообщений: 2,344
Бабло: $456535
По умолчанию

мультикурл класс довел руками сам не хуяя на ханипоты не рвется можно указать скачал 128 кбайт и рви связь
mavook вне форума