LINUX.ORG.RU

[хочу странного] обновление страницы при событии на сервере

 


1

0

на сервере стророннее приложение делает записи в БД. Надо отобразить эти записи в web интерфейсе. Мне в голову приходит только вариант - встроить в страницу таймер на javascript и по нему делать периодические запросы к скрипту, который будет делать запрос в БД и отправлять обновленную страницу. Но хотелось бы делать обновления не периодически, а только в те моменты когда произошла запись в базу. Возможно ли такое?

ЗЫЖ Приложение пишущее в базу если надо может как-то дополнительно просигнализировать о записи.

★★

Вариантов, на самом деле, немного. Да и простого решения тоже не наблюдается.

Вариант один: Заголовок multipart/x-mixed-replace позволяет "проталкивать" (push) контент от сервера к клиенту (но, как водится, не работает в IE (как мин 6м)). Но, судя по датам написания статей по использованию этого заголовка - это _очень_ древнее решение.

http://www.abiglime.com/webmaster/articles/cgi/032498.htm
http://www.xulplanet.com/tutorials/mozsdk/serverpush.php

Вариант два: использовать так называемый long polling. Но это по сути тот же опрос сервера, только ответ ты получаешь сразу.

http://cometdaily.com/2007/11/15/the-long-polling-technique/
http://cometdaily.com/2007/11/16/more-on-long-polling/

Похоже, ты действительно "хочешь странного".

it-partizan
()
Ответ на: комментарий от it-partizan

x-mixed-replace то что нужно, причем сделать можно так:

1. Грузится обычная страница, в ней JavaScript которые уже асинхронно запросит другую страницу в которой уже будет этот x-mixed-replace в результате на каждую порцию данных полученных от сервера, будет вызываться JavaScript функция обработчик которая может делать с полученными данными все что нужно на самом деле: дописывать их в определенную облась на странице, замещять что-то, или вообще принимать XML обрабатывать его и отображать результат в том виде в котором он нужен.

zhiltsov
()

концептуально такая задача может решаться с помощью паттерна проектирования "Наблюдатель" (Observer)

anonymous
()

>Мне в голову приходит только вариант - встроить в страницу таймер на javascript и по нему делать периодические запросы к скрипту, который будет делать запрос в БД и отправлять обновленную страницу. Но хотелось бы делать обновления не периодически, а только в те моменты когда произошла запись в базу. Возможно ли такое?

При обновлении базы выставляешь флаг update, ajax спаршивает у сервера состояние флага, если обновлено, то релоад или аджаксом же запросить выборку с сервера. Это минимальный трафик. Можно потыкать таймауты, так чтобы ответ аджакса приходил при обновлении базы это будет оптимально.

wfrr ★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.