2017-02-22 5 views
0

В настоящее время я пишу компонент «collaboration_control» для следующих целей:Компонент мониторинга через LOAD

Показать все новости, написанные в базе данных любым другим компонентом. Это означает, что если другой компонент (даже используемый другим пользователем в его собственной среде, совместно) записывает соответствующую запись в таблицу «update_information», компонент управления совместной работой должен читать и отображать ее.

Я загружаю компонент управления взаимодействием через LOAD в пустой DIV. Затем компонент ищет любые новые соответствующие записи в БД. Конечно, этот пинговый механизм производит измеримую загрузку процессора. В качестве решения я просто использовал time.sleep(), например, в течение 5 секунд в компоненте управления совместной работой, прежде чем он перезагрузится для следующего поиска. Но в течение этого 5 спальных секунд все остальные компоненты этой страницы спят слишком :-(

Таким образом, мой вопрос: Как можно реализовать асинхронный просмотровый-компонент в web2py

Заранее спасибо за? любая поддержка!

с наилучшими пожеланиями Clemens

ответ

1

Если вы используете time.sleep(), это звучит, как вы вызывает запрос Ajax, чтобы сделать паузу на сервере, заставляя каждый запрос занять 5 секунд. Это не является хорошей идеей , так как он будет занимать веб-сервер thr в течение 5 секунд. Кроме того, если вы используете сеансы по умолчанию, основанные на файлах, открытие открытого запроса Ajax в течение нескольких секунд предотвратит выполнение дополнительных запросов Ajax, поскольку каждый запрос помещает блокировку в файл сеанса. Чтобы смягчить эту проблему, вы можете явно разблокировать файл сеанса до 5 секундной паузы, но есть гораздо лучший подход, который заключается в том, чтобы вместо этого браузер выполнял ожидание между выполнением запросов Ajax.

На самом деле помощник LOAD() имеет встроенные функции для перезагрузки через определенные промежутки времени. Например:

{{=LOAD(..., ajax=True, timeout=5000, times='infinity')}} 

выше перезагрузит компонент каждые 5 секунд (но запрос Ajax вернется быстро, с ожиданием делается в браузере с помощью Javascript).

Обратите внимание, что в зависимости от вашего уровня трафика опрос через Ajax каждые несколько секунд может привести к слишком большой нагрузке на ваш сервер. В этом случае вы можете рассмотреть более эффективную альтернативу на основе push, такую ​​как функциональность web2py websocket_messaging или что-то вроде Nchan.

+0

Anthony, спасибо большое !!! Вы это знаете: как всегда ваш ответ - это решение! С уважением, Clemens – Clemens

+0

Добро пожаловать. Я добавил примечание в конце, предлагая альтернативный подход, если загрузка сервера становится проблемой. – Anthony

+0

Хорошо, спасибо! Я буду следить за полученным трафиком. В случае, если он слишком высок, механизм push действительно будет альтернативой. Я собираюсь держать вас в курсе ... – Clemens

Смежные вопросы