![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
Alf162 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 29.11.2011 Где: Москва Репутация: нет Всего: нет |
Здравствуйте. Есть ли механизмы в firebird с помощью которых можно было бы отреагировать на событие изменения изменения бд. Т.е. в базу добавились новые записи и приложение на php могло на это отреагировать. Вариант с таймером единственное, что приходит на ум. Записи добавляются через десктопное приложение и туда влезть возможности нет. Какие могут быть варианты?
|
|||
|
||||
Zorak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
работы с таймером на PHP попросту нет, хотя в зависимости от условий данную задачу можно решить. Далее... здесь надо не так firebird как PHP (тут же создана тема). Если хочешь с таймером - смотри в сторону js и будет тебе счастье. Если PHP - напиши больше ниформации, тогда мб и будут советы с использованием PHP.
-------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
|||
|
||||
Alf162 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 29.11.2011 Где: Москва Репутация: нет Всего: нет |
Как сделать с таймером я примерно знаю, но этот вариант не очень подходит. Нужен php.
Больше информации: есть база FB и приложение на Delphi, которое работает с этой базой. На php сделан web-интерфейс, с помощью которого отображаются данные из этой базы. Так вот, необходимо, чтобы при добавлении новой записи в базу, приложение на php немедленно реагировало и отображала новую, появившуюся в базе информацю |
|||
|
||||
Zorak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
смотри в сторону cron. Если не подходит то более извращенный способ php: header('refresh: 3') или как то так. Будет тебе каждые 3 секунды обновлять страницу (или укажи другое число). Чтобы не было долгой перезагрузки, то привяжи ajax, который будет обновлять не страницу а только данные в таблице. Моментально реагировать не будет, но если указать вменяемый интервал в header, который тебе нужен, то вовремя будеш видить измененя в базе.
Это 1 из примеров что пришли мне в голову, а вообще можно и другими способами, ну как по мне я бы делал именно так. Да будет тебе счастье.! -------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 3 Всего: 42 |
http://www.cyberforum.ru/ado-net/thread588000.html
но для скрипта пхп это так просто не пройдет. Т.е. тебе нужен какой-либо скрипт/демон (можно на самом пхп) который будет слушать события и твоя веб-часть которая будет аяксом этот скрипт/демон опрашивать. По поводу связи веб-фронтенда с демоном можно посмотреть в сторону long polling технологий -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
Alf162 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 29.11.2011 Где: Москва Репутация: нет Всего: нет |
Спасибо за ответы, попробую через refresh, это как-то ближе)
|
|||
|
||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: нет Всего: 55 |
Такой подход не очень удобно смотрится с точки зрения пользователя. Бесконтрольные обновления страницы... Я не знаю Ваш уровень, как программиста, но попробую предложить краткое описание возможного решения Вашей задачи. Да, конечно, на PHP это не очень элегантно получится =) Нужно уметь работать с сессиями в PHP, с кешем в PHP, с ajax в JavaScript, с long polling в JavaScript. Поскольку запись в базу, видимо, так же производится через веб-интерфейс, то несложно дополнить скрипт новыми возможностями. При успешной записи данных в БД (или любом другом требуемом месте) добавить в кеш в некий массив (например, "events") запись с указанием имени события и его временем, например событие "RecordCreated". Создать скрипт, который будет выполняться по ajax-запросу (ну, обычный скрипт, в общем). В нем проверить в текущей сессии пользователя время последнего получения события. Из кеша из массива событий получить все события, которые случились после последней проверки. Если событий нет, то продолжать скриптом проверки массива в кеше, например, каждую 1 секунду (long polling). При наличии событий записать в сессию время последнего обработанного события и отправить события пользователю любым удобным образом. На стороне пользователя получить ответ от сервера со списком событий. Нужным образом отреагировать на события. Например, при получении строки "RecordCreated" обновить таблицу данных с помощью ajax. После чего отправить новый ajax-запрос в скрипт событий. Как-то так... -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
Zorak |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 720 Регистрация: 13.11.2007 Репутация: нет Всего: 3 |
Alf162, тут Arantir кстати прав, обьясню: (касается исключительно пользователя) 1. Если на стороне пользователя страница будет перезагружатся каждые n секунд.. лично я наверное убилбы разработчика, и чем меньше секунд, тем больше раз убилбы. В этом случае спасает ajax, который обновляет часть страницы по сути БЕЗ перезагрузки самой страницы. Тут не убилбы... наоборот даже... возьми для примера букмекерские сайты. Очень часто встречается момент, когда данные обнвляются просто постоянно. Т.е. несколько раз в короткий промежуток времени. Иными словами если твоя страница будет для пользователя, то тут до refresha лепить ajax обьязательно далее... 2. По поводу бесконтрольных обнвлений страниц. Опять же... при перезагрузке страниц по сути происходит отправка неких данных, и кто более менее понимает сущность интернета и программирования, то это просто напросто вызывает настороженность, а в друг он передает какието мои личные данные из компьютера?? Иначе зачем перезагружается раз в 3 секунды страница ???.. И тут опять же спасает ajax, хотя от опасения не полностью). А если страница лично тебе, то тут смотри сам, как тебе удобно. Это сообщение отредактировал(а) Zorak - 16.5.2013, 20:48 -------------------- Знание - сила. А сила есть, ума не надо... Занимаюсь интернет бизнесом и ищу новых партнеров. Кому интересно - обращайтесь в ЛС, скайп или мыло. |
|||
|
||||
Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 3 Всего: 42 |
У Firebird есть механизм "событий" насколько он рабочий не подскажу. гуглите. -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
Arantir |
|
|||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: нет Всего: 55 |
Все равно их придется куда-то прикрутить, чтобы они "дошли" до пользователя. Не будет же СУБД напрямую юзеру в браузер ответы слать. А на PHP я вообще трудно представляю полноценные "человеческие" события. Я бы сразу отдельного демона на каком-то Node.js сделал. Хотя бы чтобы ночью спать спокойно... В программировании все возможно, но не все оно хорошо и правильно. Я как-то больше сторонник рациональных решений. -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
Alf162 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 29.11.2011 Где: Москва Репутация: нет Всего: нет |
Про node.js я слышал, но у меня windows и только windows (ко всему прочему еще и IIS). В общем решил делать с таймером и ajax'ом, все почти готово. Добавляются записи через Delphi, поэтому вариант с сессиями тоже не очень
|
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Базы Данных | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |