I''m в настоящее время вертело с приложением, которое имеет установку, соответствующую следующую аналогию: чатJBoss Seam - Массивные сообщения в Заявке
- чат является объектом, который хранится в памяти и содержит список чат сообщения
- чат отображается в нескольких окнах браузера и обновления тянули с использованием a4j: нажмите
программная установка выглядит следующим образом: экземпляр объекта чата с его сообщений разделяемых между компонентами шовного слоя PAGE в разных сеансах. Теперь, когда какой-либо сеанс отправляет новое сообщение, то есть изменяет объект чата, все компоненты шва должны быть уведомлены о новом сообщении, чтобы новое состояние могло быть передано в пользовательский интерфейс для всех клиентов.
я могу думать о трех способов достижения этой цели:
- событий Seam с чатом ID в качестве параметра, а затем каждый компонент проверяет ID и либо обновление или игнорирует сообщение
- JMS Очередь или один JMS тема, где каждый компонент listenes на с фильтром для всего это чат
- чистый механизм Java слушателя в общем объекте чата, то есть каждый шов компонент регистрирует к нему и уведомлению чистому и прямому Java
Для аргументации предположим, что количество чатов велико (десятки тысяч), а количество пользователей чатов невелико (скажем, 2-10).
Какова эффективность каждого шкалы? Есть ли у вас какие-либо другие предложения, как сделать это с помощью Seam и хорошо работать?
Как я вижу, (1) будет интегрирован и чист, но в конечном итоге вы будете уведомлять десятки тысяч компонентов, где только немногие действительно нуждаются в этом. Поэтому он, вероятно, не будет масштабироваться.
(2) будет интегрирован и зависит только от производительности JMS-провайдера (который может быть обменен), а также будет работать в кластерной среде без изменений. Я не уверен в производительности JMS здесь, то есть несколько сотен сообщений в секунду и тысячи слушателей с разными фильтрами много или нет?
(3) был бы быстрым, так как только необходимые компоненты были бы уведомлены, а уведомление является чистым и прямым java. Тем не менее, проблемы параллелизма/доступа могут возникать из-за того, что выполняется нечто пересечение сессии/компонента/потока.
Для (1) и (3) решение, которое поддерживает кластеризацию, должно быть добавлено вручную, если потребуется в какой-то момент.