2011-06-22 7 views
2

私はスレッドを無駄にすることなくクライアントに通知する効率的な方法を理解するのに苦労しています。クライアントがCometDサーブレットに接続するとき、クライアントのサーバー側のイベントを監視し、利用可能なときにクライアントに公開する必要があります。これは、スレッドプールやサーブレットスレッドを使用しないもので行う必要があります。私が見るすべての例は、クライアント起源のイベントと、サーバー上のリスナーの例です。私は逆が必要です...私は自分のマシンにClient/ServerSessionオブジェクトを渡しますか?これは一般的なパターンであるようですが、私は例を見つけることができません。クライアントにサーバーサイドイベントを通知するためのjava cometdパターンは何ですか?

+0

weblogicを使用している場合は、すべてが組み込まれています。http://download.oracle.com/docs/cd/E15051_01/wls/docs103/webapp/pubsub.html – RealHowTo

答えて

0

サーブレット3.0の非同期APIを見てください。特に、ServletRequest.startAsync()AsyncContextオブジェクトを返します。このオブジェクトは "自分のマシンに手渡す"ことができ、サーブレットdoGet()/ doPost()/ etcから戻ることができます。接続を終了することなく。

次に、データをクライアントに送り返すためのさまざまなパターンがあります。私はあなた自身の機械がAsyncContextからServletResponseを取り出しそれに書き込むことができると信じています。別の方法は、AsyncContextdispatch()を呼び出し、doGet()/ doPost()メソッドを再度呼び出すことです。

+0

ありがとうございます。私はbayeux/cometdを使用しようとしており、これをいくつか抽象化しているので、どのように扱うのかがはっきりしていません。私は自分自身のスレッドプールを使用し、Bayeuxが提供するサブスクリプション/サブスクリプションコールバックを使用してプール内のジョブをスケジュールしました。 –

関連する問題