2013-06-03 2 views
0

Я написал веб-приложение, которое использует плагин Google Earth для визуализации десятков (если не сотен) геотегированных источников данных в качестве сетевых ссылок. На данный момент единственный способ получить обновления на дисплее - установить автоматическое обновление на каждой сетевой ссылке. Однако со многими ссылками и коротким интервалом обновления (1-2 с) сервер, на котором размещаются ссылки, легко перегружается (загрузка процессора достигает почти 100%). Многие из этих обновлений не возвращают никаких данных, поэтому я хотел бы использовать механизм push и иметь возможность подталкивать обновления KML к клиенту по новым данным - это избавит меня от большой обработки. Есть ли способ асинхронно нажимать KML на плагин GE (желательно на Java)?Можно ли нажать KML на Google Earth?

ответ

2

Теоретически это можно сделать с помощью длинного опроса.

Вы только что установили, что сервер поддерживает открытое соединение и проверяет, доступен ли новый контент, как только он появится, он возвращает его клиенту.

GE будет открывать только одну сетевую ссылку на соединение, поэтому пока соединение открыто, ничего не происходит, старое содержимое видно. Как только данные обновляются, новое соединение открывается через X секунд. Повторение процесса.

Сервер должен иметь возможность поддерживать большое количество подключений открытым, но в основном это дормент, поэтому не должно вызывать нагрузки. (вам просто нужно приложение веб-сервера, способное это сделать)

Но на практике его обманывали подводные камни. В основном, если есть какой-либо прокси-сервер между GE и сервером, они часто будут тайм-аут, прежде чем что-либо произойдет, и отключите соединение. И, к сожалению, после сбоя сетевого соединения один раз, GE обычно перестает пытаться обновить эту ссылку.


Alternativly мог бы использовать в Update механизм, встроенный в KML. Таким образом, у вас есть только ОДИН, освежающий сетевой канал. Но это может быть сложно сделать, чтобы работать надёжно.


Наконец, и, вероятно, наиболее recommedned - это реализовать механизм обновления за пределами плагина, в JavaScript. Таким образом, тот факт, что ссылка обновляется, переносится в контейнер Javascript, который затем просто специально обновляет определенный контент по мере необходимости.

Может использовать подобный длинный опрос в JS или использовать что-то вроде websockets для Push-уведомлений. Есть надежные реализации, которые можно просто повторно использовать.

+0

Большое спасибо за подробный ответ! Длительный опрос звучит как интересная идея, это может быть ответ на мою проблему. Имея только одну освежающую ссылку - это звучит сложнее, но, возможно, даже лучше, мне нужно будет пересмотреть примеры использования и посмотреть, можно ли это сделать так. Я не понимал, что обновление KML может обновлять не только один документ. Что касается вашего последнего (рекомендуемого) предложения - я не совсем уверен, что понимаю. Не могли бы вы указать мне какой-нибудь ресурс/пример? Я использую GWT (GUI, AJAX) и сервлеты (обновления KML на стороне сервера). Спасибо! – m0squito

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