| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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. А какие еще варианты? И мессажинг - это асинхронный способ коммуникации с постоянно соединенным клиентом. 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 | ||
Спасибо за пример. Комет - это, на мой взгляд, попытка реализовать идеи мессажинг подручными средствами ( протокол HTTP и клиент на JS ). Как я уже выше предположил, возможность синхронизации начального состояния и последуюших обновлений в мессажинг системе обеспечивается отправкой начального состояния и последующих обновлений через одно постоянное соединение. Наверное и в комет так же. A eще как обеспечивают синхронизацию? Что предложил бы J2EE сертифицированный специалист? Мессажинг? |