Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
Многопоточность Socket/cURL оно нам надо? |

14.11.2009, 21:54
|
|
Познающий
Регистрация: 22.05.2009
Сообщений: 59
Провел на форуме: 105435
Репутация:
5
|
|
Многопоточность Socket/cURL оно нам надо?
Доброго всем времени суток. На днях столкнулся с такой задачей - писал накрутчик, через несколько дней работы скрипта показалось что из него можно выжать больше переходов, от знакомых узнал что есть такая отличная фишка на курле - многопоточность, после нескольких тестов понял что скорость мне не удается увеличить... Сам я только начинаю разбираться во в языке php поэто я хотел бы посоветоваться с профессионалами.
|
|
|

14.11.2009, 21:57
|
|
Познающий
Регистрация: 22.05.2009
Сообщений: 59
Провел на форуме: 105435
Репутация:
5
|
|
Собственно вот простенький пример
<?
include 'krut.php';
include 'config.php';
include 'r.php';
if (!$mass_proxy) { echo "Net Proxy";} else { echo"Proxy v poryade<br>";}
if (!$mass_browser) { echo "Net Browsers";} else { echo"Browsers v poryade<br>";}
/////////////////////////////////////////////////////////////////////////////////////////////////////
$pause = floor(3500 / $my_hosts);
$rand_br_max = count($mass_browser);
$rand_pr_max = count($mass_proxy);
$ctr = rand(65,130);
for ($i=0; $i < $my_hosts ; $i++) {
if ($i % $ctr == 0) { $zhertva = $linck; } else { $zhertva = $kartinka; }
$proxy = explode(":",$mass_proxy[rand(0,$rand_pr_max)]); //разделяем ип от порта
$s = stream_socket_client("test2.ru:80", $errno, $errstr, $timeout, STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT) ;
if ($s){
$send = "GET ".$zhertva." HTTP/1.1\r\n";
$send .= "Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n";
$send .= "Referer: ".$my_referer."\r\n";
$send .= "Accept-Language: ru\r\n";
$send .= "Accept-Encoding: gzip, deflate\r\n";
$send .= "User-Agent: ".$mass_browser[rand($rand_br_min,$rand_br_max)]."\r\n";
$send .= "Host: ".$host_zhertva."\r\n";
$send .= "Connection: Keep-Alive\r\n";
$send .= "\r\n";
fputs($s,$send);
echo date("G:i:s").'<br>';
}
sleep($pause);
}
?>
Последний раз редактировалось Engineer; 14.11.2009 в 22:06..
|
|
|

14.11.2009, 22:05
|
|
Познающий
Регистрация: 22.05.2009
Сообщений: 59
Провел на форуме: 105435
Репутация:
5
|
|
Мнение к которому я пришел возможно ошибочно но я решил что при использовании таких функциё как stream_socket_client и stream_select всего лишь разбивает наш поток на две части т.е - 1 запрос 2 ответ. Но как вы видите вторую функцию я не стал использовать т.к ответ меня не интересует(ведь скрипт всего лишь генерит запросы)
PS не нужно строго судить я всего лишь хочу в этом разобраться, а многопоточность я так и не смог внедрить.... Помогите разобраться
|
|
|

14.11.2009, 22:09
|
|
Познающий
Регистрация: 22.05.2009
Сообщений: 59
Провел на форуме: 105435
Репутация:
5
|
|
Если кому то интересно вот скрипт с многопоточностью. Оригинальная тема на ibm.com
<?php
echo "Program starts at ". date('h:i:s') . ".\n";
$timeout=10;
$result=array();
$sockets=array();
$convenient_read_block=8192;
/* Выполнить одновременно все запросы; ничего не блокируется. */
$delay=15;
$id=0;
while ($delay > 0) {
$s=stream_socket_client("phaseit.net:80", $errno,
$errstr, $timeout,
STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT) ;
if ($s) {
$sockets[$id++]=$s;
$http_message="GET /demonstration/delay?delay=" .
$delay . " HTTP/1.0\r\nHost: phaseit.net\r\n\r\n";
fwrite($s, $http_message);
} else {
echo "Stream " . $id . " failed to open correctly.";
}
$delay -= 3;
}
while (count($sockets)) {
$read=$sockets;
stream_select($read, $w=null, $e=null, $timeout);
if (count($read)) {
/* stream_select обычно перемешивает $read, поэтому мы должны вычислить,
из какого сокета выполняется чтение. */
foreach ($read as $r) {
$id=array_search($r, $sockets);
$data=fread($r, $convenient_read_block);
/* Сокет можно прочитать либо потому что он
имеет данные для чтения, ЛИБО потому что он в состоянии EOF. */
if (strlen($data) == 0) {
echo "Stream " . $id . " closes at " . date('h:i:s') . ".\n";
fclose($r);
unset($sockets[$id]);
} else {
$result[$id] .= $data;
}
}
} else {
/* Таймаут означает, что *все* потоки не
дождались получения ответа. */
echo "Time-out!\n";
break;
}
}
?>
|
|
|

14.11.2009, 22:10
|
|
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме: 6462214
Репутация:
3171
|
|
от знакомых узнал что есть такая отличная фишка на курле - многопоточность
Смеяться или плакать?
Твои знакомые тебе наврали,наглым образом.
|
|
|

14.11.2009, 22:15
|
|
Познающий
Регистрация: 22.05.2009
Сообщений: 59
Провел на форуме: 105435
Репутация:
5
|
|
Почему? В инете полно информации на эту тему.
Хотя возможно ты и прав, спорить не буду, это не совсем многопоточность но по словам разработчиков ibm.com это может заметно увеличить отдачу, в моем случае это бы помогло вести реальные логи посещений ( т.к. сейчас некоторые запросы просто не доходят до адресата )
Последний раз редактировалось Engineer; 14.11.2009 в 22:24..
|
|
|

14.11.2009, 22:21
|
|
Постоянный
Регистрация: 09.11.2006
Сообщений: 639
Провел на форуме: 1917742
Репутация:
541
|
|
гугли в сторону pcntl
|
|
|

14.11.2009, 22:31
|
|
Познающий
Регистрация: 22.05.2009
Сообщений: 59
Провел на форуме: 105435
Репутация:
5
|
|
Сообщение от LEE_ROY
гугли в сторону pcntl
О спасибо! Буду разбираться.
Но хотелось бы услышать мнение разбирающихся людей и по данному вопросу
|
|
|

14.11.2009, 22:47
|
|
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме: 6462214
Репутация:
3171
|
|
Сообщение от Engineer
О спасибо! Буду разбираться.
Но хотелось бы услышать мнение разбирающихся людей и по данному вопросу
Я тебе свое мнение высказал.Переписывай на Perl or Python.Благо,на форуме ты можеш все найти,останеться только соединить в то что ты хочеш,а извращение с мультикурлом и сокетами - это....пи****.Но так как я личность крайне глупая,меня можно и не слушать,и ждать PHP 6.
|
|
|

14.11.2009, 23:34
|
|
Познающий
Регистрация: 22.05.2009
Сообщений: 59
Провел на форуме: 105435
Репутация:
5
|
|
Да успакойся ты  разберусь в этом вопросе потм попробую на питоне написать, и вовсе ты не глупый )))
Кстати не думаю что в 6 версии многопоточность появится, скорре всего придумают еще одно подобное извращение, т.к. где то читал что тесты внедрения параллелизма провалились....
Последний раз редактировалось Engineer; 15.11.2009 в 05:54..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|