Система уведомлений с p: poll / push
Я пытался реализовать базовую систему уведомлений для базовой социальной сети сp:poll
на вид слоя и простойNotificationService
класс, который получает новые уведомления из БД и обновляет список уведомленийNotificationBean
который просматривается для каждого пользователя. Ход процесса похож на этот:
-Poll calls NotificationBean.getNewNotifications for example every 15 sec.
--getNewNotifications calls NotificationService and DAO methods
---notificationList of user is refreshed
----DataTable on view layer shows new notifications
Но беспокойствоp:poll
о его производительности, потому что он отправляет запрос по истечении каждого интервала.
PrimeFaces имеетPrimePush основанный на Atmosphere Framework, он открывает веб-сокеты и кажется более подходящим для создания системы уведомлений.
Но я не знаю, какие компоненты и какие свойства их следует использовать. В нем естьp:socket
компонент сchannel
свойство. Должен ли я использовать имена пользователей в качествеchannel
ценности? Ниже приведен код, представленный демонстрацией PrimeFaces, и суммированы последние предложения:
<p:socket onMessage="handleMessage" channel="/notifications" />
Насколько я понял изэтот пример витрина этоp:socket
слушаетnotifications
канал. И фрагмент кода толкателя:
PushContext pushContext = PushContextFactory.getDefault().getPushContext();
pushContext.push("/notifications", new FacesMessage(summary, detail));
Но это будет уведомлять все пользовательские страницы, мне нужен толкатель, который уведомляет конкретного пользователя. Допустим, есть 2 пользователя и предположим, что пользователь1 добавляет пользователя 2 в друзья. Там должно быть что-то. как это:
pushContext.push("User2/notifications", new FacesMessage("friendship request", "from User1"));
Но я не уверен, что это правильное использование для такого рода функциональных требований или нет. Учитывая масштабируемость приложения, может быть дорогая стоимость открытия такого количества каналов в одном процессе.
Спасибо за помощь.