Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Синхронизация обновлений коллекции на клиенте.


Автор: COVD 2.8.2010, 17:09
Как решается в J2ЕЕ следующая задача?

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

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

Какие стандартные способы реализации этого средствами J2ЕЕ?

Автор: eros2 2.8.2010, 18:04
Посмотрите в сторону JMS.

Автор: COVD 2.8.2010, 18:35
Цитата

Посмотрите в сторону JMS.


Да, JMS гарантирует, что сообщения не будут потеряны - клиент подтверждает серверу каждое посланное сообщение. Но как синхронизируется начальное состояние (весь список) с потоком обновлений? Наверное надо все, и начальное состояние и обновления слать через JMS. А какие еще варианты? И мессажинг - это асинхронный способ коммуникации с постоянно соединенным клиентом. A eсли более простой вариант, синхронный, т.е. поллинг, последовательние запросы?

Автор: eros2 2.8.2010, 19:03
Ну незнаю...

Я бы сделал наверное так - 
есть таблица с сообщениями и в таблице поле "сообщение прочитано (забрано?)". Клиент забирает непрочитанные (незабранные?) сообщения, выводит на экран и ставит признак "прочитано".
чтоб клиент не поллил постоянно - кидать ему jms-сообщение когда для него есть данные. 

Т.е. - jms-сообщение не несёт никакой инфы кроме уведомления о новых данных. Клиент просто забирает незабранные данные. И не нужно постоянно поллить, передавать новые ИДы и т.п.

Автор: COVD 2.8.2010, 19:09
Понятно, спасибо.

Автор: Vasay 2.8.2010, 21:37
COVD, 
Цитата

Например, это список сообшений участников чата.


Для чата удобно использовать http://en.wikipedia.org/wiki/Comet_(programming) (в GlassFish и Jetty  имееются comet сервера).


Обычно это используется с js клиентом, но наверняка можно и с более "толстыми" клиентами использовать.  

Автор: COVD 2.8.2010, 22:17
Цитата

Для чата удобно использовать comet

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

A eще как обеспечивают синхронизацию?
Что предложил бы J2EE сертифицированный специалист? Мессажинг?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)