powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Автоматическое обновление по событию у другого клиента
21 сообщений из 21, страница 1 из 1
Автоматическое обновление по событию у другого клиента
    #38742419
Сентябрин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем здравствуйте. Прошу совета по вопросу решения достаточно стандартной задачи. Несмотря на её стандартность, в доке по апексу решения не нашёл, а вешать процесс на таймаут не очень хочется.
Задача - бронирование неких ресурсов (в моём случае - посадочных мест). Т.е., есть центральная база Oracle, на ней APEX, в нём приложение, с помощью которого пользователи "занимают" место. Вопрос в том, как организовать автоматическое обновление некоего списка свободных мест по событию. Грубо говоря, когда один пользователь занял место (видимо, это будет некий insert в табличку) - остальные, у которых открыта эта страница, должны увидеть "покрасневшее" место.
Я пока не придумал ничего умнее, чем раз в 2 секунды запускать процесс и проверять места. Но это совсем не то, чего мне на самом деле хочется. Во-первых, генерируется достаточно большая (и ненужная) работа даже при отсутствии событий. Во-вторых... как-то это тупо, что ли? В общем, прошу натолкнуть меня. Использовать что-либо, кроме APEX, не хотелось бы.
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38742464
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сентябрин,

Для лучшего решения нужно завести в таблице поле с датой последнего обновления и индекс по нему. В итоге каждые n секунд пулять ajax с условием POLE>sysdate-1/24/60 например. То есть каждые n секунд мы проверяем данные, которые изменились за последнюю минуту. С индексом будут быстро возвращаться 0 строк. Сомневаюсь что это создаст большую нагрузку.

Сканить можно например каждые 10 секунд. В итоге самое долгое ожидание будет 10 секунд, хотя можно попасть в случай когда мы увидим измененное место спустя всего 1 секунду.

Если же основная таблица очень большая, можно завести какую-нибудь буферную таблицу, которая хранит данные только за последний день и каждый день ее чистить.
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38742536
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gustly,

Вопрос, как я понял, не в том. Автор и сам определился как это сделать технически.

Меня тоже как то интересовал этот вопрос, что бы не делать постоянные опросы на изменение состояния системы. Надо что бысам сервер посылал клиенту комманду на обновление, но дело в том что в http соединение не держися постоянно(специфика протокола), поэтому сервер не может посылать клиенту запросы, только наоборот, НО...
Кто то мне подсказал, что может и это Server Push

Мне тоже интересна эта тема, так что если что то получится, то опубликуйте, пожалуйста, здесь решение.
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38742549
Сентябрин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я примерно так и сделал. Только у меня сейчас раз в две секунды. Но мне кажется это диким. Неужели нет каких-то нормальных событий и т.п.
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38742580
websocket
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38742737
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СентябринНеужели нет каких-то нормальных событий и т.п.

сам я подобное в простом варианте делал только через обычный htmldb_get + settimeout,
но, можете попробовать воспользоваться плагинами:

http://www.oracle.com/technetwork/developer-tools/apex/application-express/apex-plug-ins-182042.html

Timer (в комбинации с dynamic action execute pl/sql code можно возвращать результат в айтемсы периодически)
Notification

http://www.apex-plugin.com/

Notification
Alertify
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38742937
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дак автор как раз не хочет этого. Что бы клиент постоянно опрашивал сервер на изменение, если даже этих самых изменений и не было.
А хочет, что бы как данные поменялись в БД сервер сам оповестил клиент что данные можно забрать.

Автор, так ли это?
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38743038
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasik,

Ну вон ему кинули вариант с nodejs. Вроде не очень сложно и даже интересно.
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38743067
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasik,

Помойму, Long Polling редко используется в вебе, и мне не показалось, что ТС любитель набивать шишки.

Что касается апекса, текущая архитектура не позволяет реализовать механизм,
т.к. веб сервер сначало делает запрос к базе, и только когда страница будет полностью помещена в буфер, начнет считывать его, после чего соединение закроет. Разве что использовать что-то кроме апекса.
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38743084
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SvDev,

Вот и мне интересна была это тема, только до конца анализ не провел а только вот зацепку... Про закрытое соединение писал выше... Просто, как и автор, ситуацию с опросом сервера каждые 1-2 сек считаю не оч локаничной)
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38743093
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasik,

Например тот же яндекс, судя по консоли, каждые 10 минут опрашивает письма. В данном случае лучше увеличить время до 10-20 секунд. Или ставить nodejs, comet вроде не ахти вариант и мало где используется. За дополнительными сведениями думаю лучше в раздел HTML.
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38743144
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gustly.... За дополнительными сведениями думаю лучше в раздел HTML.
JavaScript наверное, у них там и подраздел соответствующий есть.
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38743268
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kasik,

HTML, JavaScript, VBScript, CSS
Это один большой раздел.
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38743333
Сентябрин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем за развитие дискуссии, надеюсь, она не сразу затухнет.
SvDev Что касается апекса, текущая архитектура не позволяет реализовать механизм,
т.к. веб сервер сначало делает запрос к базе, и только когда страница будет полностью помещена в буфер, начнет считывать его, после чего соединение закроет. Разве что использовать что-то кроме апекса.
Собственно, после этого мне стало понятно, что без внешних средств не обойтись.
Я погуглил по вебоскетам (ещё одно спасибо!), но меня смутила необходимость, фактически, поднимать ещё один сервис, как я понял node.js. Ну, во всяком случае, он выглядит как сервис. И ещё беспокоит стабильность этого решения. Поэтому спрошу - кто-то делал подобное на node.js?
Увеличить до 10 секунд в моём случае означает увеличить вероятность того, что меня прибьют за параллельное бронирование одного и того же места :) Возможно, я выбрал не самый удачный инструмент для реализации задачи, но есть другие обстоятельства, которые повлияли на это.
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38743346
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сентябрин... меня прибьют за параллельное бронирование одного и того же места :)

Это уже задача не только клиента. Решение: блокировки на уровне БД.
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38743574
Сентябрин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kasikСентябрин... меня прибьют за параллельное бронирование одного и того же места :)
Это уже задача не только клиента. Решение: блокировки на уровне БД.
Кстати, да. Ради этого даже хотел создать отдельную ветку. Но пока не выработал собственного решения, может, подскажете что-то и в этом направлении?
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38743577
Сентябрин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точнее сказать, я что-то увлёкся интерфейсом в ущерб блокировкам базы. Меня захватила проблема отсутствия событий как таковых. Вот теперь экспериментирую с node.js благодаря форуму.
Я же правильно понимаю, что в плане контроля занятия ресурсов на стороне БД есть определённые паттерны? Просто я никогда не занимался этой темой, и подсказать сейчас некому. Но изобретать двухколёсный велосипед, едущий задом наперёд, мне бы сильно не хотелось.
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38743762
non-apexoid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С Apex вполне уживается технология SSE (server sent events). Например, если нужно обновить регион (репорт) по изменению данных в таблице, можно сделать так: на загрузку страницы повесить инициализацию обработчика sse, в url для которого указать процесс уровня приложения, который будет ожидать нужное событие, например, через механизм алертов или через pipe. Алерты или сообщения в pipe будут генерироваться триггером БД, отслеживающим нужные нам изменения данных в таблице. Pipe в данном случае надёжней. Как минимум один пример использования SSE с Apex в сети есть.
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38743809
kasik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
non-apexoid,

Интересно!

Сентябрин,
Тебе уже много накидали вариаций, так что можно совместить эти технологии (node.js or SSE и lock db).
Так что выкладывай результаты когда что то получится)
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38743833
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверку можно сделать тупо в триггере перед апдейтом. Если значение поля уже "занято" и пытаются занять опять, то ругаться. И все.
...
Рейтинг: 0 / 0
Автоматическое обновление по событию у другого клиента
    #38744058
SvDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СентябринТочнее сказать, я что-то увлёкся интерфейсом в ущерб блокировкам базы. Меня захватила проблема отсутствия событий как таковых. Вот теперь экспериментирую с node.js благодаря форуму.
Я же правильно понимаю, что в плане контроля занятия ресурсов на стороне БД есть определённые паттерны? Просто я никогда не занимался этой темой, и подсказать сейчас некому. Но изобретать двухколёсный велосипед, едущий задом наперёд, мне бы сильно не хотелось.
Если нужно гарантировать целостность данных, то, например, unique constraint
(или unique function based index, если того структура требует)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / Автоматическое обновление по событию у другого клиента
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]