我尝试为具有p:poll
视图层的基本社交网络和一个简单的NotificationService
类实现基本通知系统,该类从 DB 获取新通知并刷新NotificationBean
每个用户的视图范围内的通知列表。流程类似这样:
-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
但关注的p:poll
是它的性能,因为它会在每个间隔到期时发送一个查询。
PrimeFaces 有基于 Atmosphere 框架的PrimePush,它打开 web-sockets,似乎更适合创建通知系统。
但我不知道应该使用哪些组件以及它们的哪些属性。它具有具有属性的p:socket
组件。channel
我应该使用用户名作为channel
值吗?下面的代码来自 PrimeFaces 展示并总结了最后几句话:
<p:socket onMessage="handleMessage" channel="/notifications" />
据我从这个展示示例中了解到,这是一个p:socket
监听notifications
频道。推送代码片段是:
PushContext pushContext = PushContextFactory.getDefault().getPushContext();
pushContext.push("/notifications", new FacesMessage(summary, detail));
但这会通知所有用户页面,我需要一个通知特定用户的推送器。假设有 2 个用户并假设 User1 将 User2 添加为朋友。一定有的。像那样:
pushContext.push("User2/notifications", new FacesMessage("friendship request", "from User1"));
但我不确定这是否是这种功能需求的正确用法。考虑到应用程序的可扩展性,每个进程打开如此多的通道可能会产生昂贵的成本。
感谢您的帮助。