Sistema de notificação com p: poll / push
Eu tentei implementar o sistema básico de notificação para uma rede social básica comp:poll
na camada de visão e um simplesNotificationService
classe que recebe as novas notificações do banco de dados e atualiza a lista de notificações deNotificationBean
qual é o viewscoped para cada usuário. Fluxo de processo semelhante 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
Mas a preocupação dep:poll
é sobre seu desempenho porque envia uma consulta a cada expiração de intervalo.
PrimeFaces temPrimePush que, baseado no Atmosphere Framework, abre web-sockets e parece mais adequado para criar sistema de notificações.
Mas eu não sei quais componentes e quais propriedades deles devem ser usados. Temp:socket
componente comchannel
propriedade. Devo usar nomes de usuários comochannel
valores? Abaixo do código vindo do showcase PrimeFaces e resume as últimas frases:
<p:socket onMessage="handleMessage" channel="/notifications" />
Tanto quanto eu entendi deeste exemplo de vitrine istop:socket
ouvenotifications
canal. E trecho de código empurrador é:
PushContext pushContext = PushContextFactory.getDefault().getPushContext();
pushContext.push("/notifications", new FacesMessage(summary, detail));
Mas isso irá notificar todas as páginas do usuário, eu preciso de um empurrador que notifica usuário específico. Vamos dizer que existem 2 usuários e assumir que o Usuário1 adiciona o Usuário2 como um amigo. Deve haver sth. Curtiu isso:
pushContext.push("User2/notifications", new FacesMessage("friendship request", "from User1"));
Mas não tenho certeza se esse é o uso correto para esse tipo de requisito funcional ou não. Considerando a escalabilidade do aplicativo, pode haver um custo caro de abrir tantos canais por processo.
Obrigado por ajudar.