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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage