12 Stimmen

Benachrichtigungssystem mit p:poll/push

Ich habe versucht, das grundlegende Benachrichtigungssystem für ein einfaches soziales Netzwerk mit p:poll auf der Ansichtsebene und eine einfache NotificationService Klasse, die die neuen Benachrichtigungen aus der DB abruft und die Liste der Benachrichtigungen von NotificationBean die für jeden Benutzer aufgeschlüsselt ist. Prozessablauf ähnlich wie hier:

-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 der p:poll ist die Leistung des Systems, da es bei jedem Ablauf des Intervalls eine Abfrage sendet.

PrimeFaces hat PrimePush das auf Atmosphere Framework basiert, öffnet Web-Sockets und scheint für die Erstellung von Benachrichtigungssystemen besser geeignet zu sein.

Aber ich weiß nicht, welche Komponenten und welche Eigenschaften von ihnen verwendet werden sollen. Es hat p:socket Komponente mit channel Eigentum. Sollte ich Benutzernamen als channel Werte? Der nachfolgende Code stammt aus PrimeFaces und fasst die letzten Sätze zusammen:

<p:socket onMessage="handleMessage" channel="/notifications" /> 

Soweit ich das aus dieses Vorzeigebeispiel este p:socket hört zu notifications Kanal. Und Pusher-Code-Schnipsel ist:

PushContext pushContext = PushContextFactory.getDefault().getPushContext();       
pushContext.push("/notifications", new FacesMessage(summary, detail));

Aber dies wird alle Benutzerseiten benachrichtigen, ich brauche einen Pusher, der bestimmte Benutzer benachrichtigt. Sagen wir, es gibt 2 Benutzer und nehmen wir an, dass Benutzer1 Benutzer2 als Freund hinzufügt. So etwas muss es doch geben:

pushContext.push("User2/notifications", new FacesMessage("friendship request", "from User1"));

Ich bin mir aber nicht sicher, ob dies die richtige Verwendung für diese Art von funktionalen Anforderungen ist. In Anbetracht der Skalierbarkeit der App kann es teuer werden, so viele Kanäle pro Prozess zu öffnen.

Danke für die Hilfe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X