Как обновить пользовательский интерфейс, когда данные изменились? - PullRequest
3 голосов
/ 29 февраля 2012

У меня есть ряд файлов XML, которые могут быть извлечены, отредактированы и сохранены пользователем.Я хочу разрешить нескольким пользователям редактировать эти файлы одновременно.Многие части этих XML-файлов относятся к содержимому, отображаемому в пользовательском интерфейсе браузера, например, отображается узел <name>My title</name>, который можно редактировать.

Используемые мной технологии - это Javascript, PHP и главный XML-файл.содержит ссылки на другие файлы XML (как основные, так и ссылочные файлы можно редактировать в пользовательском интерфейсе).На сервере включена поддержка WebDAV, а методы WebDAV используются через модуль io YUI3 для обработки поиска, сохранения, перемещения коллекции и т. Д.

Как выполнить обновление пользовательских интерфейсов, в которых используются эти ресурсы, на основе содержимогоотредактированный и сохраненный XML-файл (ы)?

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

ура!

1 Ответ

3 голосов
/ 29 февраля 2012

Функция, которую вы описываете, похожа на технику, известную как push-сервер. То, что вы просите сделать, - это очень сложная вещь для веб-приложения (особенно для PHP, которое основано на идее обработки запроса и завершения сценария).

HTML5 представляет такие технологии, как веб-сокеты для поддержания постоянного подключения к серверу, вы можете посмотреть на веб-сокеты как на решение, но это совершенно новая технология, и я не думаю, что спецификация еще даже доработана, поэтому будет реализован только в самых последних версиях браузеров, если вообще будет.

Вы уже упоминали опрос AJAX (управляемый setInterval), но вы также заметили, что это проблематично. Конечно, вы правы, локальные данные могут устареть в промежутке между опросами, и вы будете генерировать большой трафик между сервером и любыми открытыми клиентами.

Альтернативой является так называемый "длинный опрос". Идея состоит в том, что клиент начинает сеанс AJAX с сервером. На сервере скрипт, вызываемый клиентом, в основном просто сидит там и ждет, когда что-то изменится. Когда это происходит, сервер уведомляет клиента, отправляя JSON / XML / любой другой ответ и закрывая сеанс AJAX. Когда клиент получает ответ, он обрабатывает его и инициирует новое подключение AJAX, чтобы дождаться ответа другого сервера.

Этот подход почти мгновенный, потому что данные передаются клиенту, как только они становятся доступными. Однако это также означает много открытых соединений с сервером, и это может привести к большой нагрузке на сервер. Кроме того, PHP-скрипты на самом деле не предназначены для долгого времени работы или сна из-за модели «запрос-ответ», на которой построен язык. Возможно, но, вероятно, не рекомендуется следовать этому подходу.

Как реализовать базовый «длинный опрос»? содержит несколько примеров техники длительного опроса.

Удачи!

...