ФорумПрограммированиеPHP для идиотов → Многопоточность в PHP

Многопоточность в PHP

  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 6 марта 2009 г. 3:26

    Решил реализовать многопоточность.
    Возможно я что то не догоняю… или просто не так понимаю логику работы)

    index.php - запуск
    script.php - файл отвечающий за действия

    <?php

    set_time_limit(0);

    /* Допустим, что у нас есть массив $links_array со списком ссылок,
    с которыми нам нужно что-то сделать, например скачать */

    $links_array = array(1,2,3,4);

    $host='test1.ru'; // наш хост
    $max_threads = 20; // максимальное количество потоков
    $threads = array(); // тут будем держать открытые потоки

    $done = false;

    //reset($links_array);

    while(!$done) {
    // если количество запущенных потоков меньше максимального
    if(count($threads) < $max_threads) {
    // получаем очередную ссылку
    if($link=current($links_array)) {
    // открываем сокет и формируем заголовок
    $socket = fsockopen($host, 80);
    //script.php - скрипт который выполняет задачу
    $url="http://".$host."/e/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;
    }

    ?>



    script.php


    session_start();

    $_SESSION['links'][] = $_GET['link'];


    Поидее же должно заноситсья в сессию links каждое значение $links_array… но оно не происходит… в чем может быть дело? скрипт не мой
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 3:36, спустя 9 минут 41 секунду

    Скрипт не мой, я просто разместил объяву.

    А почему там должна быть одна сессия на все запрашиваемые сценарии?
    Ты же куки не обрабатываешь.
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 6 марта 2009 г. 3:46, спустя 9 минут 40 секунд

    Вася я тебя не понял
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 6 марта 2009 г. 3:48, спустя 2 минуты 39 секунд

    васа_к вроде не вася xD
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 4:07, спустя 18 минут 52 секунды

    Он не вася, он просто Ц
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • pasha

    Сообщения: 1048 Репутация: N Группа: Адекваты

    Spritz 6 марта 2009 г. 4:15, спустя 7 минут 39 секунд

    Лучше б ответ дельный дали)
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 4:42, спустя 26 минут 53 секунды

    Pasha, читать влом, тем более не твой… Ты сам попробуй написать.
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 4:43, спустя 54 секунды

    http://habrahabr.ru/blogs/php/40545/ вот посмотри
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 4:45, спустя 2 минуты 47 секунд

    http://habrahabr.ru/blogs/php/40432/
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • DDoSяН

    Сообщения: 232 Репутация: N Группа: Кто попало

    Spritz 6 марта 2009 г. 9:46, спустя 5 часов 24 секунды

    Ща холливар начнется
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 6 марта 2009 г. 11:22, спустя 1 час 36 минут 30 секунд

    Хорошо, ещё раз.
    Почему script.php должен все надцать раз работать в рамках одной сессии? А не в рамках надцати сессий?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!