Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Межскриптовая синхронизация (PHP/Perl/SQL) (https://forum.antichat.xyz/showthread.php?t=52457)

hidden 31.10.2007 12:58

Межскриптовая синхронизация (PHP/Perl/SQL)
 
Есть такая ситуация: Запускается первый скрипт и говорит "Я Вася", через некоторое время запускается второй и говорит "Я Петя", потом запускается третий и говорит, "Я Гриша, кстати Вася, тебе что-то пришло", а Вася проверяет что ему пришло. Все скрипты должны находится в режиме ожидания и их может быть очень много.

Кто-нибудь знает как такое реализовать не запуская свой демон? С демоном через сокеты я и так уже сделал, но это не слишком универсально, может есть более удобный метод?

biophreak 31.10.2007 13:10

А может просто запускать скрипты один из другого с нужными параметрами?
Если неправильно понял - не ругай...

groundhog 31.10.2007 13:16

hidden, если ты это мутишь на юникс платформе в консоли, то почему бы тебе не воспользоваться системой сигналов? Заведи юзерские сигналы, повесь на них обработчики и пускай нужный скрипт реагирует на сигнал что-то проверяя...

hidden 31.10.2007 21:18

2biophreak неправильно понял...

Цитата:

Сообщение от groundhog
hidden, если ты это мутишь на юникс платформе в консоли, то почему бы тебе не воспользоваться системой сигналов?

Это вообще то на юниксовом серсере подразумевается, но не в консоли, а на аппаче и желательно в PHP
Цитата:

Сообщение от groundhog
Заведи юзерские сигналы, повесь на них обработчики и пускай нужный скрипт реагирует на сигнал что-то проверяя...

Представь, если сотня скриптов будут реагировать на сигнал, который поступает каждую десятую секунды, что это получится, а ведь их может быть и больше, тем-более всё-равно надо что-то проверять, тогда нужно будет обеспечить синхронизированный доступ к этому ресурсу(как-то его сбрасывать), вариант сложнее и менее эффективен чем с демоном.

ZaCo 31.10.2007 22:16

совсем не ясна задача

hidden 31.10.2007 22:45

Цитата:

Сообщение от ZaCo
совсем не ясна задача

Поясняю...
Есть таблица в SQL, пользовательский скрипт устанавливает ожидание на определённую запись в этой таблице, а когда другой скрипт изменяет эту запись, он уведомляет тех, кто ожидает эту запись.

PS Такой вариант не катит. :)
Код:

for(;check_sql();sleep(100)){}

nc.STRIEM 31.10.2007 23:04

ну пусть когда какойто скрипт обновит, то он запустит тот скринт который ожидает

ZaCo 01.11.2007 00:15

>>Есть таблица в SQL, пользовательский скрипт устанавливает ожидание на
>>определённую запись в этой таблице, а когда другой скрипт изменяет эту запись, он
>>уведомляет тех, кто ожидает эту запись.

ну пусть пользовательский скрипт добавляет запись в отдельную таблицу `ocheredi` с указанием типа ожидаемой записи и rand_id, затем создает у себя файл rand_id с правами записи от пользователя apache (тут нужно уточнить рамки безопасности поставленной задачи) и синхронно read ожидает поступления новых байт. соответсвенно скрипт добавляющий очередную запись в таблицу проверяет одновременно `ocheredi` на наличие записей того же типа и пишет во все rand_id о поступлении новой записи, при этом удаляя обработанные записи.

hidden 01.11.2007 02:45

Нее, пока-что перл-демон с блокирующими сокетами остаётся оптимальным вариантом.

Я просто подумал, может есть что-то типа CreateEvent, WaitForSingleObject (Виндовые функции) или в SQL так составить запрос, чтоб он ожидал изменения указанной записи...

Anyway, thanks for the tries... :)

ZaCo 01.11.2007 10:58

>>Нее, пока-что перл-демон с блокирующими сокетами остаётся оптимальным вариантом.
только, я надеюсь, реализовано это все через unix-сокеты (af_unix)? а то на такие частые обращения портов не хватит)

>>Я просто подумал, может есть что-то типа CreateEvent, WaitForSingleObject
а зачем есть все на блокирующих сокетах? пусть ставит recv и ждет своего "события".

>>или в SQL так составить запрос, чтоб он ожидал изменения указанной записи...
не знаю как где, но mysql с его элементарным запрос-ответом этого сделать не позволит.


Время: 04:33