Есть такая ситуация: Запускается первый скрипт и говорит "Я Вася", через некоторое время запускается второй и говорит "Я Петя", потом запускается третий и говорит, "Я Гриша, кстати Вася, тебе что-то пришло", а Вася проверяет что ему пришло. Все скрипты должны находится в режиме ожидания и их может быть очень много. Кто-нибудь знает как такое реализовать не запуская свой демон? С демоном через сокеты я и так уже сделал, но это не слишком универсально, может есть более удобный метод?
А может просто запускать скрипты один из другого с нужными параметрами? Если неправильно понял - не ругай...
hidden, если ты это мутишь на юникс платформе в консоли, то почему бы тебе не воспользоваться системой сигналов? Заведи юзерские сигналы, повесь на них обработчики и пускай нужный скрипт реагирует на сигнал что-то проверяя...
2biophreak неправильно понял... Это вообще то на юниксовом серсере подразумевается, но не в консоли, а на аппаче и желательно в PHP Представь, если сотня скриптов будут реагировать на сигнал, который поступает каждую десятую секунды, что это получится, а ведь их может быть и больше, тем-более всё-равно надо что-то проверять, тогда нужно будет обеспечить синхронизированный доступ к этому ресурсу(как-то его сбрасывать), вариант сложнее и менее эффективен чем с демоном.
Поясняю... Есть таблица в SQL, пользовательский скрипт устанавливает ожидание на определённую запись в этой таблице, а когда другой скрипт изменяет эту запись, он уведомляет тех, кто ожидает эту запись. PS Такой вариант не катит. Code: for(;check_sql();sleep(100)){}
>>Есть таблица в SQL, пользовательский скрипт устанавливает ожидание на >>определённую запись в этой таблице, а когда другой скрипт изменяет эту запись, он >>уведомляет тех, кто ожидает эту запись. ну пусть пользовательский скрипт добавляет запись в отдельную таблицу `ocheredi` с указанием типа ожидаемой записи и rand_id, затем создает у себя файл rand_id с правами записи от пользователя apache (тут нужно уточнить рамки безопасности поставленной задачи) и синхронно read ожидает поступления новых байт. соответсвенно скрипт добавляющий очередную запись в таблицу проверяет одновременно `ocheredi` на наличие записей того же типа и пишет во все rand_id о поступлении новой записи, при этом удаляя обработанные записи.
Нее, пока-что перл-демон с блокирующими сокетами остаётся оптимальным вариантом. Я просто подумал, может есть что-то типа CreateEvent, WaitForSingleObject (Виндовые функции) или в SQL так составить запрос, чтоб он ожидал изменения указанной записи... Anyway, thanks for the tries...
>>Нее, пока-что перл-демон с блокирующими сокетами остаётся оптимальным вариантом. только, я надеюсь, реализовано это все через unix-сокеты (af_unix)? а то на такие частые обращения портов не хватит) >>Я просто подумал, может есть что-то типа CreateEvent, WaitForSingleObject а зачем есть все на блокирующих сокетах? пусть ставит recv и ждет своего "события". >>или в SQL так составить запрос, чтоб он ожидал изменения указанной записи... не знаю как где, но mysql с его элементарным запрос-ответом этого сделать не позволит.
hidden, я лишний раз убедился, что ты алгоритм понимаешь неправильно. Ты вынес задачи СУБД на какой-то скрипт... Зачем? Да и в конце-концов - поставь задачу чётко, какая СУБД? Какой язык программирования? В какой среде это всё будет выполняться? Я думаю, что тебе нужно отталкиваться от тригеров... Пускай у тебя будет очередь подписчиков на изменения в каком-то объекте, а уже триггер после модификации объекта будет дёргать и вызывать что-то, или иным образом уведомлять получателей...
2groundhog Не волнуйся так за меня, с алгоритмом я как-нибудь разберусь 2ZaCo Хм..Честно-говоря не знал разницу между этими сокетами, я так понял это "IO::Socket::UNIX" и разницы в использовании практически никакой, ок, поправлю