| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Подписаться на событие в бд |
| Автор: Alf162 16.5.2013, 09:12 |
| Здравствуйте. Есть ли механизмы в firebird с помощью которых можно было бы отреагировать на событие изменения изменения бд. Т.е. в базу добавились новые записи и приложение на php могло на это отреагировать. Вариант с таймером единственное, что приходит на ум. Записи добавляются через десктопное приложение и туда влезть возможности нет. Какие могут быть варианты? |
| Автор: Zorak 16.5.2013, 09:50 |
| работы с таймером на PHP попросту нет, хотя в зависимости от условий данную задачу можно решить. Далее... здесь надо не так firebird как PHP (тут же создана тема). Если хочешь с таймером - смотри в сторону js и будет тебе счастье. Если PHP - напиши больше ниформации, тогда мб и будут советы с использованием PHP. |
| Автор: Alf162 16.5.2013, 12:21 |
| Как сделать с таймером я примерно знаю, но этот вариант не очень подходит. Нужен php. Больше информации: есть база FB и приложение на Delphi, которое работает с этой базой. На php сделан web-интерфейс, с помощью которого отображаются данные из этой базы. Так вот, необходимо, чтобы при добавлении новой записи в базу, приложение на php немедленно реагировало и отображала новую, появившуюся в базе информацю |
| Автор: Zorak 16.5.2013, 14:01 |
| смотри в сторону cron. Если не подходит то более извращенный способ php: header('refresh: 3') или как то так. Будет тебе каждые 3 секунды обновлять страницу (или укажи другое число). Чтобы не было долгой перезагрузки, то привяжи ajax, который будет обновлять не страницу а только данные в таблице. Моментально реагировать не будет, но если указать вменяемый интервал в header, который тебе нужен, то вовремя будеш видить измененя в базе. Это 1 из примеров что пришли мне в голову, а вообще можно и другими способами, ну как по мне я бы делал именно так. Да будет тебе счастье.! |
| Автор: Fortop 16.5.2013, 14:31 |
| http://www.cyberforum.ru/ado-net/thread588000.html но для скрипта пхп это так просто не пройдет. Т.е. тебе нужен какой-либо скрипт/демон (можно на самом пхп) который будет слушать события и твоя веб-часть которая будет аяксом этот скрипт/демон опрашивать. По поводу связи веб-фронтенда с демоном можно посмотреть в сторону long polling технологий |
| Автор: Alf162 16.5.2013, 19:19 |
| Спасибо за ответы, попробую через refresh, это как-то ближе) |
| Автор: Arantir 16.5.2013, 20:38 |
Такой подход не очень удобно смотрится с точки зрения пользователя. Бесконтрольные обновления страницы... Я не знаю Ваш уровень, как программиста, но попробую предложить краткое описание возможного решения Вашей задачи. Да, конечно, на PHP это не очень элегантно получится =) Нужно уметь работать с сессиями в PHP, с кешем в PHP, с ajax в JavaScript, с long polling в JavaScript. Поскольку запись в базу, видимо, так же производится через веб-интерфейс, то несложно дополнить скрипт новыми возможностями. При успешной записи данных в БД (или любом другом требуемом месте) добавить в кеш в некий массив (например, "events") запись с указанием имени события и его временем, например событие "RecordCreated". Создать скрипт, который будет выполняться по ajax-запросу (ну, обычный скрипт, в общем). В нем проверить в текущей сессии пользователя время последнего получения события. Из кеша из массива событий получить все события, которые случились после последней проверки. Если событий нет, то продолжать скриптом проверки массива в кеше, например, каждую 1 секунду (long polling). При наличии событий записать в сессию время последнего обработанного события и отправить события пользователю любым удобным образом. На стороне пользователя получить ответ от сервера со списком событий. Нужным образом отреагировать на события. Например, при получении строки "RecordCreated" обновить таблицу данных с помощью ajax. После чего отправить новый ajax-запрос в скрипт событий. Как-то так... |
| Автор: Fortop 16.5.2013, 21:46 |
У Firebird есть механизм "событий" насколько он рабочий не подскажу. гуглите. |
| Автор: Arantir 16.5.2013, 22:40 | ||
Все равно их придется куда-то прикрутить, чтобы они "дошли" до пользователя. Не будет же СУБД напрямую юзеру в браузер ответы слать. А на PHP я вообще трудно представляю полноценные "человеческие" события. Я бы сразу отдельного демона на каком-то Node.js сделал. Хотя бы чтобы ночью спать спокойно... В программировании все возможно, но не все оно хорошо и правильно. Я как-то больше сторонник рациональных решений. |
| Автор: Alf162 17.5.2013, 10:32 |
| Про node.js я слышал, но у меня windows и только windows (ко всему прочему еще и IIS). В общем решил делать с таймером и ajax'ом, все почти готово. Добавляются записи через Delphi, поэтому вариант с сессиями тоже не очень |