Посоветуйте демона

Тема в разделе "PHP Pro", создана пользователем KillDead, 25 авг 2010.

Статус темы:
Закрыта.
  1. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    В общем пишу авторегер, разбил регистрацию на 3 этапа –
    1- Регистрация
    2- Получение письма
    3- Активация аккаунта
    Запускать всё по очереди- не лучшая идея. Так что думаю в сторону Демона, который запустит эти 3 скрипта одновременно, ну и на главной странице будет выводить информацию о ходе работы и управлять запуском и остановкой скриптов.
    Посоветуйте демона, помню, натыкался как раз на довольно большой класс, в котором была связка с ajax. Вроде именно то, что нужно, но название забыл напроч.
     
  2. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    350
    Зачем такой изврат !?
    Сколько делал регеров всегда шол по такой цепочке:

    PHP:
    $ns // ключ так сказать потока.
    // Нужно для того чтобы капчи сохронялись под уником и печеньки.
    while(true)
    {
    // Регимся.
    // Если не зарегились (капча неверная проксик умер и т.п.) continue;

    // Активация  (получения письма распарска активация) если баг то continue;
    // Запись данных акка.
    // Очистка файлов потока (капча печеньки).
    if (is_file('stop_'$ns)) exit('Стапонули насильно.');
    }
    Вроде ничего не забыл...
    Все логируется сразу и в файл и в бравзер.
    Далее к 1 скрипту оброщяешся столько сколько нужно потоков.
    При работе потока хорошо постоянно файл переписывать в temp к примеру дабы видеть отвалившиеся потоки и прослеживать остановку.
    Как то так )
    Не знаю... Всегда обходился 1 файлом для запуска без всяких демонов.
    PS. Про мульти курл знаю отстаньте ! А то щяс налетите что мол глупо так многопоточность делать - нехера совсем не глупо ! ИМХО
     
  3. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    От этого варианта ушёл и приходить снова к нему- не хочу. Да, для регеров\спамилок линейное программирование оч подходит- не нужны сложные перенаправления, переопределения, наследование и тд. И намного проще и, следовательно, надёжнее- вариант, что будет какая нить ошибка меньше, чем когда полно сложных классов. И мультикурл не могу назвать оч хорошей идеей- глючит периодически и создаёт иллюзию нагромождённости.
    НО, когда писал регеры, часто наступал на одни и те же грабли. Хотя опыт у меня не богатый да и кодераст я хреновый. Ведь что предоставляет из себя скрипт- это примерно блоки: «подготовка»-«парсинг»-«капча»-«пост»…. И часто я не отделят их, кроме как комментарием, да и то не всегда, так что всё писалось в кучу, при больших объёмах трудно было что-то понять. И если требуется написать что-то большее чем просторегер- напр. создание доров на различных хостингах, то это нужно думать, как лучше.

    Так что решил написать класс, в основном основываясь на нужды регеров. Долго шёл, думая что нужно, перепробовал кучу говноклассов. Естественно с хорошими наработками никто не делился. Оч. понравилось такое,
    PHP:
    $multicurl->parse1()->post1()->parse2()->post2();
    Оч. наглядно и понятно что за чем следует. Но, кода не было, и я не понимал, если, к примеру, нужно идти по другой цепочке, в зависимости от результата, то что ж делать?
    Так что создал такой концепт- каждый скрипт (не обязательно регер, может парсер, спамер…) представляет из себя отдельный класс. Каждая функция возвращает массив-задание, в котором указана следующая функция, которой будет передан результат. Если возвращён массив в котором массивов заданий несколько - то, класс копируется и создаётся ещё N потоков. Для мультикурла это вообще идеальный вариант - просто создав кучю объектов, не надо заботься о всяких flock’ах и не боятся перепутать данные, которые мы отправляли вначале и получили в конце. Всё наглядно и более просто- функция для подготовки данных, функця для парсинга1, для отправки пост данных2, куча простых функций которые обрабатывают результат. Так что не надо искать по всему коду, где результат записывается в базу и пытаться найти переменные, которые в базу попадают, нужно просто найти функцию save(), и при желании переопределить её.

    Для наблюдения за отдельным потоком, долго думал, но остановился пока на обычном js- формируется таблица, в которой каждая строка- один поток. И в классе идёт печать js кода <script>modify(id, ‘Классное сообщение №1 для потока id’)</script>. Это хорошо для наблюдения за работой, но ошибки так не отловишь. Так что сделал функцию дебага- запись каждой страницы, заголовков, данных курл в отдельную папку для отдельного потока. Добавил сюда ещё sleep, антикапчю, генерацию заголовков, режимов прокси 5 штук…- получилось довольно прилично.
    ---------------------
    Другое, обращаясь к теме выбора демона, уже отказался от этой идеи. Решил делать с помощью iframe- просто печать нужных окон и одновременный запуск.
     
  4. Inviseble_Demon

    Inviseble_Demon

    Регистр.:
    11 дек 2008
    Сообщения:
    482
    Симпатии:
    350
    Аккуратнее с фреймами!
    Я тоже многопоточность так делал... :D
    Опера по моему не откроет более 10 фреймов пока не загрузится хоть 1 кароче не более 10 активных фреймов....

    Я в итоге забил на открытие на 1 странице нескольких фреймов и написал цыкл гетов через meta.
    То есть открываем фрейм а ниже meta refresh через 5 сек.
    В GET шаг и максимум указан...
    Все бы хорошо но опера делала на ура это а фаерфокс (или как он там правельно) отказался редиректить пока не загрузится фрейм (((

    Короче с фреймами тоже намучаешься.....
     
  5. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Вот while(true) {} – это тотальный изврат.
    Использовать бесконечный цикл крайне небезопасно.
     
  6. KillDead

    KillDead

    Регистр.:
    11 авг 2006
    Сообщения:
    883
    Симпатии:
    540
    Но что делать, если нужно к примеру проверять письма постоянно, т.е. на крон ставить както нехочется. вообще у меня такое
    PHP:
    while(file_exits('file.pin')){
    если файл существует, по идее быстрее file_exits быстрее пашет.
     
  7. admLoki

    admLoki генератор случайного PHP

    Регистр.:
    14 сен 2006
    Сообщения:
    481
    Симпатии:
    93
    Periodical caller на JS.
     
  8. CNiks0N

    CNiks0N lamp.root

    Регистр.:
    28 ноя 2008
    Сообщения:
    230
    Симпатии:
    48
    Я извращался с jquery и ассинхронным аяксом, очень удачно получилось.
    Держит 20-50 процессов
     
Статус темы:
Закрыта.