System powiadomień z p: poll / push
Próbowałem zaimplementować podstawowy system powiadomień dla podstawowej sieci społecznościowejp:poll
na warstwie widoku i prostejNotificationService
klasa, która pobiera nowe powiadomienia z DB i odświeża listę powiadomieńNotificationBean
który jest wyświetlany dla każdego użytkownika. Przepływ procesu podobny do tego:
-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
Ale troskap:poll
chodzi o jego wydajność, ponieważ wysyła zapytanie przy każdym wygaśnięciu interwału.
PrimeFaces maPrimePush oparty na Atmosphere Framework, otwiera gniazda sieciowe i wydaje się bardziej odpowiedni do tworzenia systemu powiadomień.
Ale nie wiem, które składniki i jakie właściwości powinny być używane. To map:socket
komponent zchannel
własność. Czy powinienem używać nazw użytkownika jakochannel
wartości? Poniżej kod pochodzący z prezentacji PrimeFaces i podsumowuje ostatnie zdania:
<p:socket onMessage="handleMessage" channel="/notifications" />
Z tego co zrozumiałemten przykładowy przykład top:socket
słuchanotifications
kanał. A fragment kodu popychacza to:
PushContext pushContext = PushContextFactory.getDefault().getPushContext();
pushContext.push("/notifications", new FacesMessage(summary, detail));
Ale to powiadomi wszystkie strony użytkownika, potrzebuję popychacza, który powiadamia konkretnego użytkownika. Powiedzmy, że jest 2 użytkowników i załóżmy, że użytkownik1 dodaje użytkownika2 jako przyjaciela. Musi być coś. tak:
pushContext.push("User2/notifications", new FacesMessage("friendship request", "from User1"));
Ale nie jestem pewien, czy jest to właściwe użycie dla tego rodzaju wymagań funkcjonalnych, czy nie. Biorąc pod uwagę skalowalność aplikacji, może być kosztowny koszt otwarcia tak wielu kanałów w jednym procesie.
Dzięki za pomoc.