Sistema de notificación con p: encuesta / push.
He intentado implementar el sistema de notificación básico para una red social básica conp:poll
en la capa de vista y un simpleNotificationService
clase que recibe las nuevas notificaciones de DB y actualiza la lista de notificaciones deNotificationBean
que se visualiza para cada usuario. Proceso de flujo similar a este:
-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
Pero la preocupación dep:poll
se trata de su rendimiento porque envía una consulta en cada intervalo de caducidad.
PrimeFaces tienePrimePush que se basa en Atmosphere Framework, abre sockets web y parece más adecuado para crear un sistema de notificaciones.
Pero no sé qué componentes y qué propiedades de ellos deberían usarse. Tienep:socket
componente conchannel
propiedad. ¿Debo usar nombres de usuario comochannel
¿valores? Debajo del código que viene de PrimeFaces se muestra y resume las últimas oraciones:
<p:socket onMessage="handleMessage" channel="/notifications" />
Por lo que entendí deeste ejemplo de escaparate estap:socket
escuchanotifications
canal. Y el fragmento de código de empujador es:
PushContext pushContext = PushContextFactory.getDefault().getPushContext();
pushContext.push("/notifications", new FacesMessage(summary, detail));
Pero esto notificará a todas las páginas de usuarios, necesito un pulsador que notifique a un usuario específico. Digamos que hay 2 usuarios y supongamos que User1 agrega User2 como amigo. Debe haber algo como eso:
pushContext.push("User2/notifications", new FacesMessage("friendship request", "from User1"));
Pero no estoy seguro de que este sea el uso correcto para este tipo de requisitos funcionales o no. Teniendo en cuenta la escalabilidad de la aplicación, puede haber un costo costoso de abrir tantos canales por proceso.
Gracias por ayudar.