марта 06
Мы рассматривали реализацию многопоточности в PHP с помощью CURL
Тогда мы говорили, что многопоточности в PHP нет, но ее можно сделать если извернуться.
Одним из таких способов являются сокеты. В этом случае мы сами много раз открываем наш скрипт(как если бы на наш сайт зашло много пользователей) при этом передавая каждому из них данные, с которыми он будет работать методом GET или POST. Дальше по коду разберемся…
< ?php /* Допустим, что у нас есть массив $links_array со списком ссылок, с которыми нам нужно что-то сделать, например скачать */ $host='example.com'; // наш хост $max_threads = 20; // максимальное количество потоков $threads = array(); // тут будем держать открытые потоки $done = false; reset($links_array); while(!$done) { // если количество запущенных потоков меньше максимального if(count($threads) < $max_threads) { // получаем очередную ссылку if($link=current($links_array)) { // закодируем ее для передачи по гету $link = urlencode($link); // открываем сокет и формируем заголовок $socket = fsockopen($host, 80); //script.php - скрипт который выполняет задачу $url="http://".$host."/script.php?link=$link"; fputs($socket, "GET $url HTTP/1.0\r\n"); fputs($socket, "Host: $host\r\n"); fputs($socket, "\r\n"); stream_set_blocking($socket, 0); stream_set_timeout($socket, 3600); // запоминаем запущенный сокет $threads[] = $socket; // переходим к следующей ссылке next($links_array); } } foreach ($threads as $key=>$socket) { if(feof($socket)) { // если поток отработал, убираем его fclose($socket); unset($threads[$key]); } else { /* иначе считываем чтобы отработало считываем "вникуда" так как в моем случае от скрипта-потока мы никаких данных не получаем, тоесть нет обратной связи со скриптом если связь нужна, то скрипт-поток выводит данные с помощью echo, а скрипт-launcher их читает, тут думаю понятно */ fgets($socket, 1000); } } // делаем задержку иначе загрузка сервера приближается к 100% sleep(1); if (count($threads) == 0) $done = true; } ?>
Читать также:
27 марта, 2008 в 9:27
Ни фига не работает, куча ошибок проще написать самому с нуля.
27 марта, 2008 в 11:08
я действительно не проверял код на работоспособность. Просто пришлось такую многопоточность реализовать ну и потом код скопировал в блог. Перед этим изменив его на более понятный, позаменял имена переменных и удалил ненужные для понимания куски кода. Так что мог где-то провтыкать. Но вобще этот код для понимания принципа
6 апреля, 2008 в 22:25
It’s obvious Britney and her bratty pals are being silly. pornhub video It’s all just her and some guy flirting around and I gotta tell you without make up on Paris is ugly as fuck. megarotic video com/videos/ee20f0eba7 (posted 11 days ago) freeloader Report real news man. megarotic girl gone wild “All I want to say to Paris is you’re being led down the wrong path ” Letterman jibed during last Thursday’s Late Show. free pornhub I can’t understand why people are saying bad things about her. http pornhub
15 апреля, 2008 в 6:14
Hello my friends
