Benachrichtigungssystem mit p: poll / push
Ich habe versucht, das grundlegende Benachrichtigungssystem für ein grundlegendes soziales Netzwerk mit zu implementierenp:poll
auf Sichtebene und eine einfacheNotificationService
Klasse, die die neuen Benachrichtigungen von der Datenbank abruft und die Benachrichtigungsliste von aktualisiertNotificationBean
Dies ist für jeden Benutzer mit einem Sichtfenster versehen. Prozessablauf ähnlich wie folgt:
-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
Aber die Sorge vonp:poll
geht es um die Leistung, weil es bei jedem Intervallablauf eine Abfrage sendet.
PrimeFaces hatPrimePush das auf Atmosphere Framework basiert, es öffnet Web-Sockets und scheint für die Erstellung eines Benachrichtigungssystems besser geeignet zu sein.
Aber ich weiß nicht, welche Komponenten und welche Eigenschaften von ihnen verwendet werden sollen. Es hatp:socket
Komponente mitchannel
Eigentum. Soll ich Benutzernamen alschannel
Werte? Der folgende Code stammt aus dem PrimeFaces-Showcase und fasst die letzten Sätze zusammen:
<p:socket onMessage="handleMessage" channel="/notifications" />
Soweit ich verstanden habeDieses Vorzeigebeispiel diesep:socket
hört zunotifications
Kanal. Und Drücker-Code-Snippet ist:
PushContext pushContext = PushContextFactory.getDefault().getPushContext();
pushContext.push("/notifications", new FacesMessage(summary, detail));
Damit jedoch alle Benutzerseiten benachrichtigt werden, benötige ich einen Drücker, der bestimmte Benutzer benachrichtigt. Angenommen, es gibt 2 Benutzer und Benutzer1 fügt Benutzer2 als Freund hinzu. Es muss etw. Geben. so wie das:
pushContext.push("User2/notifications", new FacesMessage("friendship request", "from User1"));
Ich bin mir jedoch nicht sicher, ob dies die richtige Verwendung für diese Art von Funktionsanforderung ist oder nicht. In Anbetracht der Skalierbarkeit der App kann es teuer werden, so viele Kanäle pro Prozess zu öffnen.
Danke fürs Helfen.