ビューレイヤでp:poll
の基本ソーシャルネットワークの基本通知システムを実装しようとしましたが、NotificationService
クラスでは新しい通知をDBから取得し、NotificationBean
これは各ユーザーについて表示されます。これに似たプロセスフロー: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は、Atmosphere Frameworkに基づいて、Webソケットを開き、通知システムを作成するのに適しているように見えます。PrimePushがあります。
しかし、どのコンポーネントとどのプロパティを使用するべきかわかりません。これは、channel
プロパティを持つp:socket
コンポーネントを持っています。ユーザー名を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を友人として追加したとします。 sthがなければなりません。
しかし、これはこの種の機能要件の正しい使用法であるかどうかはわかりません。アプリケーションのスケーラビリティを考慮すると、プロセスごとに非常に多くのチャネルを開くコストが高くなる可能性があります。
ありがとうございます。
あるユーザーが他のユーザーに直接メッセージを送信したいですか? –
@RongNKは 'message'の理解の仕方によって決まります。質問では、私は通知を含むリストについて言及しました。 user1が自分のステータスに友人やコメントとしてuser2を追加した場合、私の実装に適した普通のStringリストまたはモデルクラスリストであるuser2の通知リストに通知を追加する必要があります。そう、はい、それは即時にする必要があります。 –
(私の英語は申し訳ありません)あなたは投票を使用したくないと思うので、サーバーはマッサージを放送し、各クライアントはフィルターをかけるか、サーバーはクライアントのアドレスを保存して特定のアドレスに送信する必要があります。あなたの問題を解決するためにプロをしましょう:) –