Просмотр полной версии : Межскриптовая синхронизация (PHP/Perl/SQL)
Есть такая ситуация: Запускается первый скрипт и говорит "Я Вася", через некоторое время запускается второй и говорит "Я Петя", потом запускается третий и говорит, "Я Гриша, кстати Вася, тебе что-то пришло", а Вася проверяет что ему пришло. Все скрипты должны находится в режиме ожидания и их может быть очень много.
Кто-нибудь знает как такое реализовать не запуская свой демон? С демоном через сокеты я и так уже сделал, но это не слишком универсально, может есть более удобный метод?
biophreak
31.10.2007, 13:10
А может просто запускать скрипты один из другого с нужными параметрами?
Если неправильно понял - не ругай...
groundhog
31.10.2007, 13:16
hidden, если ты это мутишь на юникс платформе в консоли, то почему бы тебе не воспользоваться системой сигналов? Заведи юзерские сигналы, повесь на них обработчики и пускай нужный скрипт реагирует на сигнал что-то проверяя...
2biophreak неправильно понял...
hidden, если ты это мутишь на юникс платформе в консоли, то почему бы тебе не воспользоваться системой сигналов?Это вообще то на юниксовом серсере подразумевается, но не в консоли, а на аппаче и желательно в PHP
Заведи юзерские сигналы, повесь на них обработчики и пускай нужный скрипт реагирует на сигнал что-то проверяя...Представь, если сотня скриптов будут реагировать на сигнал, который поступает каждую десятую секунды, что это получится, а ведь их может быть и больше, тем-более всё-равно надо что-то проверять, тогда нужно будет обеспечить синхронизированный доступ к этому ресурсу(как-то его сбрасывать), вариант сложнее и менее эффективен чем с демоном.
совсем не ясна задача
Поясняю...
Есть таблица в SQL, пользовательский скрипт устанавливает ожидание на определённую запись в этой таблице, а когда другой скрипт изменяет эту запись, он уведомляет тех, кто ожидает эту запись.
PS Такой вариант не катит. :)
for(;check_sql();sleep(100)){}
nc.STRIEM
31.10.2007, 23:04
ну пусть когда какойто скрипт обновит, то он запустит тот скринт который ожидает
>>Есть таблица в 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 с его элементарным запрос-ответом этого сделать не позволит.
groundhog
01.11.2007, 11:11
hidden, я лишний раз убедился, что ты алгоритм понимаешь неправильно. Ты вынес задачи СУБД на какой-то скрипт... Зачем? Да и в конце-концов - поставь задачу чётко, какая СУБД? Какой язык программирования? В какой среде это всё будет выполняться? Я думаю, что тебе нужно отталкиваться от тригеров... Пускай у тебя будет очередь подписчиков на изменения в каком-то объекте, а уже триггер после модификации объекта будет дёргать и вызывать что-то, или иным образом уведомлять получателей...
2groundhog Не волнуйся так за меня, с алгоритмом я как-нибудь разберусь ;)
2ZaCo Хм..Честно-говоря не знал разницу между этими сокетами, я так понял это "IO::Socket::UNIX" и разницы в использовании практически никакой, ок, поправлю :)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot