我試圖實現基本社交網絡的基本通知系統p:poll
在視圖層和一個簡單的NotificationService
類從數據庫獲取新的通知和刷新通知列表NotificationBean
這是每個用戶viewscoped。類似這樣的流程:p:poll/push的通知系統
-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有PrimePush它基於Atmosphere Framework,它打開網絡套接字,似乎更適合創建通知系統。
但我不知道應該使用哪些組件及其屬性。它有p:socket
組件和channel
屬性。我應該使用用戶名作爲channel
值嗎?下面從PrimeFaces代碼來展示和總結了最後一句:
<p:socket onMessage="handleMessage" channel="/notifications" />
據我瞭解,從this showcase example這個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"));
但我不確定這是否正確使用這種功能要求或不。考慮到應用程序的可擴展性,每個進程開放如此多的通道可能需要昂貴的成本。
感謝您的幫助。
你想讓一個用戶發送即時消息給其他用戶嗎? – 2013-04-12 07:03:42
@RongNK,這取決於你如何理解'消息'。在這個問題中,我提到了包含通知的列表。如果user1將user2添加爲朋友或對他/她的狀態發表評論,則應將通知添加到user2的通知列表中,該列表可以是一個純字符串列表或模型類列表,該列表更適合於我的實現。所以是的,那必須是立竿見影的。 – 2013-04-12 07:20:10
(對不起,我的英語)好吧,我想你不想使用民意調查,所以服務器會播放按摩,每個客戶端都會過濾,或者服務器必須存儲客戶端的地址併發送到特定的地址,我想。讓親解決你的問題:) – 2013-04-12 07:55:13