Мар 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
я действительно не проверял код на работоспособность. Просто пришлось такую многопоточность реализовать ну и потом код скопировал в блог. Перед этим изменив его на более понятный, позаменял имена переменных и удалил ненужные для понимания куски кода. Так что мог где-то провтыкать. Но вобще этот код для понимания принципа
15 апреля, 2008 в 6:14
Hello my friends
16 июля, 2008 в 7:08
принцип понятен, но как таковой многопоточности я не вижу
16 июля, 2008 в 18:37
а ты покури и перечитай)
18 июля, 2008 в 20:22
feof не ловится, точнее ловится, но с таймаутом в 10 секунд
P.S. для таких конструкций лучше использовать do {….} while (count($threads) > 0), и оптимизация какая-никакая, а главноe код чище и понятнее
23 июля, 2008 в 17:54
используй)
18 сентября, 2008 в 21:32
Спасибо, из того что я смотрел легче всего прикрутить к моим приложениям.
Только эти строки работать не будут, т.к. <(пробел)? &(html теги)lt;:
— < ?php
— if(count($threads) < $max_threads)
— foreach ($threads as $key=>$socket) {
18 сентября, 2008 в 21:33
И ещё то что написал VolCh , вы исправили?
В принципе сейчас проведу тесты, как инет нагрузит, думаю нормально работает скрипт! Спасибо ещё раз!
22 сентября, 2008 в 17:54
> Только эти строки работать не будут, т.к. <(пробел)?
А это гребаный вордпресовский едитор тут косяков наставил
12 февраля, 2009 в 13:03
Доброго времени суток! Мне вот тут стало интересно, а есть какие-нибудь он-лайн школы, курсы или что-то подобное, где учат на веб-мастеров? Пытаюсь найти, но ничего не нахожу. Очень хочу стать веб-мастером, слышал, что они хорошо получают. И вообще очень интересно, как это так они работают? И есть ли какие-нибудь спецпредметы, или ещё какие-нибудь специальные дисциплины, которые веб-мастерам знать обязательно? Может кто поможет, если не сложно?
Слышал, что новичков в этой среде не очень любят - и как тогда быть?
17 февраля, 2009 в 21:55
HI all,
where i find drivers for Minolta CF2002?
this is wery important for me, please hlp
If I wrote is not in the correct section, please move to the appropriate section.
sorry my bad english, i use translator
22 февраля, 2009 в 4:18
Здравствуйте
Нужны игры, кто нибудь знает, как найти игры для PSP ?
26 февраля, 2009 в 16:22
это не многопточность. автор, почитай книжки по ОС и про многопточность. это у тебя простые циклы
21 марта, 2009 в 13:37
Предлагаем услуги качественного сервиса по сносу сайтов. Возможны различные режимы атаки, которые в 99% случаев приводят к положительным результатам. По среднестатистическим данным, заказанный сайт падает в течение 5 минут после начала. В качестве демонстрации наших возможностей, допускается предварительная проверка.
Наши расценки:
1 час – 10 $
1 сутки – 70 $
Цены для крупных проектов могут варьироваться.
Для постоянных клиентов предусмотрены скидки.
Обращаться в любое время суток, ICQ: 355949762