как ускорить fsockopen

Rattus

Guest
как ускорить fsockopen

Здраствуйте.
Необходимо написать скрипт который обходя некоторые сайты собирает с них информацию (не ворует контент). Что то типа поисковика. Для этого на каждый сайт fsockopen'ом посылается POST-запрос и читается результат. Вот кусок кода:
PHP:
define ("NL", "\r\n");
flush();
$post_data="здесь данные для отправки";
$request=
	"POST ".$url." HTTP/1.0".NL.
	"Host: ".$host.NL.
	"Referer: ".$referer.NL.
	"Content-Type: application/x-www-form-urlencoded".NL.
	"Content-Length: ".strlen($post_data).NL.
	"Accept: */*".NL.
	"Accept-Encoding: gzip, deflate".NL.
	"Connection: Keep-Alive".NL.
	"User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)".NL.
	"".NL.
	$post_data;
flush();
$fp = fsockopen($host, 80, &$errno, &$errstr, 30);
if($fp)
{
	fwrite($fp, $request);
	while (!feof($fp))
	{
		$reply .= fread($fp, 8192);
	}
	fclose($fp);
}
else
{
	return "<p class=error>".$host.": ".$errstr." (".$errno.")</p>\n";
}
и таких кусков достаточно много и они повторяются в цикле с разными хостами в значениях $host и пр., но как показала практика, все это очень долго отрабатывается (15 хостов около 20 минут), играться с set_time_limit() до бесконечности думаю не стоит, пому что скрипт может запускатся по несколько раз в час а куча бесконечно работающих экземпляров скриптов в памяти я думаю не есть гуд.
По этому вопросы:
1) как реально ускорить работу скрипта, чтобы кол-во обрабатываемых серверов не сильно сказывалось на времени исполнения
2) можно ли определить жив сервер или в дауне, для того чтобы не обрабатывать его, а перейти к следующему
3) какой таймаут в fsockopen оптимален для успешного выполнения работы?
 

Rattus

Guest
Автор оригинала: Demiurg
контент не ворует, это просто спамит.
да не спам это, а поиск, нужно искать в номенклатуре различных тогровых площадок цены на конкретные изделия. Причем тут спам?
 

Demiurg

Guest
а почему поиск осуществляется методом post ?
 

Rattus

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

Demiurg

Guest
Rattus
а можно узнать что за сайты такие ?
к тому же они согласны с тем, что их так индекстируют ?
 

Rattus

Guest
ну согласия признаюсь честно не спрашиваю,
сайты связанные с продажей электронных компонентов. Иногда случается что клиенту необходима партия редких радиодеталей, мы и хотим дать ему возможность найти через нас то что он хочет и доставить, за определенную мзду конечно. а примеры сайтов можно привести некотрые из них это findchips.com efind.ru и прочее

-~{}~ 14.09.04 17:59:

Да к конеце концов, теперь здесь что, для того чтобы задать вопрос надо документы предъявлять чтоли? =)
 

Demiurg

Guest
Rattus
Вот когда ты придешь сюда и пожалуешься, что с твоего сайта грабят информацию, что прикажешь отвечать ?
 

Demiurg

Guest
Rattus
я сам страдаю от того, что люди подобные тебе пытались выкачать весь форум, что бы смотреть в оффлайне. Так что сначала договорись с владельцами сайтов о предоставлении тебе информации, а потом продолжим разговор.
 

Powerhead13

Guest
Автор оригинала: Demiurg
Rattus
я сам страдаю от того, что люди подобные тебе пытались выкачать весь форум, что бы смотреть в оффлайне. Так что сначала договорись с владельцами сайтов о предоставлении тебе информации, а потом продолжим разговор.
Может ещё перед тем как вводить поисковый запрос в каком-нибудь каталоге, нужно согласовать это с владельцем?
А если страдаешь, от попыток выкачать форум, разве сложно ограничить количество данных на определённый адрес за определённое время?
Существует этикет для поисковых роботов, он описывается в файле robots.txt в корне сайта. Если робот будет читать этот файл и следовать его инструкциям, то все останутся довольны.
Составление robots.txt http://www.searchengines.ru/stories.php?story=03/04/21/8463120
 

Demiurg

Guest
Powerhead13
Помоему ты все проспал. Об ограничении речь и шла. Объясняю подробнее: есть правила в форуме, по которым он не дает читать больше N страниц за Т секунд. Мне, как модератору нужно читать много и на эти ограничения я и нарываюсь.

А про robots.txt ты хорошо сказал, до тебя о нем никто не знал. Проблема в том, что поисковые роботы никогда никому не мешали, нахорошие люди, которые пытаются выкочать форум не читают robots.txt.
 

valyala

Новичок
Rattus, чтобы ускорить загрузку контента, нужно распарралелить работу. Почитай про функцию [m]pcntl_fork[/m].
p.s. Мне кажется, что perl лучше подходит для таких задач.
 

Rattus

Guest
Эх, если б я еще перл знал. Пока что сделал загрузку отдельных модулей в код основной страницы с помощью iframe (какое никакое распараллеливание), правда помогло не очень. Все равно половина почему то не отрабатывает. Zero size reply....
 
Сверху