Système de notification avec p: poll / push

J'ai essayé de mettre en œuvre le système de notification de base de base pour un réseau social avec p:poll sur la couche de la vue et un simple NotificationService classe qui obtient les nouvelles notifications de DB et actualise la liste d'avis de NotificationBean qui est viewscoped pour chaque utilisateur. Processus de flux de similaire à ceci:

-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

Mais la préoccupation de p:poll est sur c'est la performance, car il envoie une requête à chaque intervalle d'expiration.

PrimeFaces a PrimePush qui est basée sur l'Atmosphère Cadre, il ouvre le web sockets et semble plus adapté pour la création de systèmes de notifications.

Mais je ne sais pas quels composants et les propriétés qui doivent être utilisés. Il a p:socket composant avec channel de la propriété. Dois-je utiliser des noms d'utilisateur comme un channel valeurs? Ci-dessous un code venant de PrimeFaces vitrine et résume les dernières phrases:

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

Que j'ai compris de cette vitrine exemple ce p:socket écoute notifications canal. Et pousseur extrait de code est:

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

Mais cela permettra d'informer tous les utilisateurs de pages, j'ai besoin d'un poussoir qui avertit l'utilisateur spécifique. Disons que il y a 2 utilisateurs et supposons que User1 ajoute User2 comme un ami. Il doit y avoir qqch. comme ça:

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

Mais je ne suis pas sûr que c'est l'usage correct pour ce genre d'exigence fonctionnelle ou non. Compte tenu de l'évolutivité de l'application, il peut être coûteux d'ouverture si de nombreux canaux par un processus.

Merci pour votre aide.

source d'informationauteur