Как синхронизировать веб-клиенты с отслеживанием состояния, когда несколько клиентов смотрят на одни и те же данные? - PullRequest
6 голосов
/ 19 мая 2010

В веб-клиенте RIA, созданном с помощью GWT, состояние сохраняется в веб-клиенте, в то время как сервер (почти) не имеет состояния (это предпочтительный метод для сохранения масштабируемости сайта).

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

Поскольку в клиенте может быть много состояний, как лучше всего синхронизировать состояние клиентов? Есть ли какие-либо Java-фреймворки, которые позаботятся об этом?

Ответы [ 4 ]

1 голос
/ 19 мая 2010

Только принудительные изменения (дельта), это применимо, а если нет - повторная синхронизация клиента полностью.Это то, что мы делаем с нашими удаленными клиентами (не только с GWT, но и с Eclipse RCP).Мы отправляем дельта-контексты, когда изменения небольшие и локальные, а при глобальных изменениях мы выполняем повторную синхронизацию.Это потребует разработки сложного протокола сравнения и часто требует пересмотра протокола удаленного клиента с нуля.

0 голосов
/ 21 мая 2010

У меня та же самая дилемма в моем приложении Flex.

Похоже, что лучший способ справиться с этим - сохранить интервал в несколько секунд между сервером и клиентом и принудительно опросить состояние для каждого клиента.

Я сделал следующий подход, обратите внимание, что это не решает ситуацию несинхронизации, а просто значительно уменьшает возможную ситуацию.

У меня на стороне сервера один кеш каждой коллекции вызовов. У меня на стороне клиента есть один кеш из тех же коллекций.

Экземпляр один загружает некоторый массив объектов в сетку. (Создает начальное состояние коллекции с сервером)

Экземпляр два загружает и вносит изменения, отправляя измененные данные на сервер, информация о БД сохраняется и кэш сервера перестраивается. (Клиентский кеш также поддерживает свой локальный кеш, не требуя повторного вызова коллекции серверов.)

Экземпляр один не синхронизирован. (будет синхронизирован на следующем интервале опроса) Второй экземпляр синхронизирован, поскольку приложение отвечает за изменения.

Оба экземпляра время от времени опрашивают сервер, как 10-секундный интервал для изменений. (Если в кеше на стороне сервера произошли изменения, новая информация будет передана всем клиентам при следующем интервальном вызове.)

Если никаких изменений на уровне сервера не происходит, информация не отправляется одному уже зарегистрированному клиенту. (Это означает, что между сервером и клиентом не осуществляется обмен информацией, что снижает накладные расходы.)

Если заходит третий клиент, его состояние свежее и он также будет выполнять необходимые вызовы для создания своего текущего кэша.

Существует задержка, но она, безусловно, помогает распространять изменения на клиенте.

Проблема в том, что клиент потребляет дополнительную память, сохраняя состояние своего кэша.

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

Надеюсь, это поможет,

Эрнани

0 голосов
/ 19 мая 2010

Поддержка Comet также доступна в GWT с использованием проекта rocket-gwt (который также предоставляет множество других интересных функций, таких как облегченные коллекции, перетаскивание и т. Д.) предоставляется пакетом Remoting .

0 голосов
/ 19 мая 2010

Самая многообещающая библиотека HTTP Push (Comet), которую я до сих пор пробовал - это StreamHub Project :

StreamHub - масштабируемый HTTP Comet и Reverse Ajax сервер, позволяющий вы толкаете живые данные в веб-браузер без каких-либо плагинов или изменения политики безопасности. Он использует Техника, известная как комета или обратный Ajax, чтобы сохранить постоянную связь открыть в браузере.

Это может быть то, что вы ищете, чтобы держать ваших клиентов в актуальном состоянии. У них также есть проект GWT .

...