Boriso
Новичок
Как реализовать на php диспетчер php-процессов (IPC на php под Windows)?
Добрый день!
Часто использую php для решения не-Web задач, например, конвертации локальных файлов, различный анализ и т.п. Для этих целей стоит Денвер (Apache + PHP + MySQL) под Windows. Скрипты запускаю через открытие окна в браузере или из командной строки. Основной недостаток - сложно отслеживать процесс и управлять, если одновременно запускаю несколько задач. Поэтому хочу создать диспетчера на php, который будет управлять скриптами (процессами).
Приведу описание в терминах строительства:
а) Участвуют: заказчик (пользователь), прораб (диспетчер), рабочие (скрипты).
б) Заказчик находит прораба (может быть только один) и формулирует ему задания.
в) Прораб находит (или использует имеющихся) рабочих, каждому из которых формулирует его ближайшую задачу.
г) Каждый рабочий, получив задание от прораба, берёт нужные инструменты и начинает работать.
д) На различных этапах рабочие могут сообщить прорабу о своём прогрессе по выполнению задач или неудаче, причём они всегда знают, где найти прораба. Иногда прораб может быть занят общением с другими участниками, поэтому надо подождать.
е) Если необходимо, то прораб может сам пойти искать рабочих - посмотреть, работают ли они. Прогресс не важен, главное, чтобы никто не "сбежал".
ж) Заказчик может спросить у прораба, что было сделано и прораб сообщит о известном ему прогрессе (пункт (б) минус пункт (д) и пункт (е)).
з) Заказчик может скорректировать задания (пункт (б)).
Дополнительно:
и) Прораб может добавить рабочих (аналог (в)) или выгнать существующих.
к) У рабочих может появиться специализация, тогда им можно давать лишь определённые задания.
Если вернуться к PHP, то хочу реализовать класс-диспетчера (прораба), который запущу из командной строки и он будет постоянно работать. При формулировке заданий зайду через браузер и, соответствующий скрипт администрирования, свяжется с диспетчером и сообщит ему о заданиях, а также получит информацию о текущем статусе.
Рабочие процессы обращаются к диспетчеру, спрашивая о новых заданиях, которые им передаются для выполнения.
Вопросы:
1) Существует ли уже пример подобной реализации централизованного управления?
2) Кроме сокетов какая может быть альтернатива эффективного подключения к классу-диспетчеру и обмена данными под windows?
3) Для сериализации запросов к классу-диспетчеру что можно использовать под windows кроме flock?
4) Есть ли примеры php-классов, реализующих IPC ("Inter-Process Communication" - межпроцессное взаимодействие) под windows?
Заранее благодарен за ответы!
Добрый день!
Часто использую php для решения не-Web задач, например, конвертации локальных файлов, различный анализ и т.п. Для этих целей стоит Денвер (Apache + PHP + MySQL) под Windows. Скрипты запускаю через открытие окна в браузере или из командной строки. Основной недостаток - сложно отслеживать процесс и управлять, если одновременно запускаю несколько задач. Поэтому хочу создать диспетчера на php, который будет управлять скриптами (процессами).
Приведу описание в терминах строительства:
а) Участвуют: заказчик (пользователь), прораб (диспетчер), рабочие (скрипты).
б) Заказчик находит прораба (может быть только один) и формулирует ему задания.
в) Прораб находит (или использует имеющихся) рабочих, каждому из которых формулирует его ближайшую задачу.
г) Каждый рабочий, получив задание от прораба, берёт нужные инструменты и начинает работать.
д) На различных этапах рабочие могут сообщить прорабу о своём прогрессе по выполнению задач или неудаче, причём они всегда знают, где найти прораба. Иногда прораб может быть занят общением с другими участниками, поэтому надо подождать.
е) Если необходимо, то прораб может сам пойти искать рабочих - посмотреть, работают ли они. Прогресс не важен, главное, чтобы никто не "сбежал".
ж) Заказчик может спросить у прораба, что было сделано и прораб сообщит о известном ему прогрессе (пункт (б) минус пункт (д) и пункт (е)).
з) Заказчик может скорректировать задания (пункт (б)).
Дополнительно:
и) Прораб может добавить рабочих (аналог (в)) или выгнать существующих.
к) У рабочих может появиться специализация, тогда им можно давать лишь определённые задания.
Если вернуться к PHP, то хочу реализовать класс-диспетчера (прораба), который запущу из командной строки и он будет постоянно работать. При формулировке заданий зайду через браузер и, соответствующий скрипт администрирования, свяжется с диспетчером и сообщит ему о заданиях, а также получит информацию о текущем статусе.
Рабочие процессы обращаются к диспетчеру, спрашивая о новых заданиях, которые им передаются для выполнения.
Вопросы:
1) Существует ли уже пример подобной реализации централизованного управления?
2) Кроме сокетов какая может быть альтернатива эффективного подключения к классу-диспетчеру и обмена данными под windows?
3) Для сериализации запросов к классу-диспетчеру что можно использовать под windows кроме flock?
4) Есть ли примеры php-классов, реализующих IPC ("Inter-Process Communication" - межпроцессное взаимодействие) под windows?
Заранее благодарен за ответы!