0

ユーザーがRESTful Webサービスを介して完了する一連のジョブを送信するSpring MVCを使用して、内部Webアプリケーションを作成しています。各ジョブの完了には数秒しかかかりませんが、ユーザーは何十ものジョブを送信できます。各ジョブの完了時にユーザーに通知するオプションが必要です。これは、サーブレット 3 にアクセスできないため、オプションが多少制限される Tomcat 6 インストールにデプロイされます。

私はこれまでにこのようなことを書いたことがなく、どうすればよいのか完全にはわかりません。ある種の長いポーリングを行いたいと考えていますが、概念的には簡単に思えますが、Spring で実装する方法がわかりません。

私の最初の計画は、単純に接続を開いたままにし (ユーザーが通知を受け取るオプションを設定した場合)、別のスレッドでジョブを開始し、ジョブが完了したら、BlockingQueue を介してリクエスト スレッドにメッセージを送信し、メッセージをユーザー。ただし、接続を長時間開いたままにしておくのは得策ではないのではないかと考えています。また、jQuery が完了する前に AJAX 応答の処理を開始する方法もわかりません。

もう 1 つのオプションは、ロング ポーリングです。Spring 3.2 がこれを行うための新しい機能を導入しているのを見ましたhere、しかし 1) それが Servlet 3 の非同期サポートに依存しているかどうかはわかりません。2) その例からそれを使用する方法が明確ではありません。 (誰かが私にもっと徹底的に教えてくれるとありがたいです)、そして3)Spring Securityを使用してこのアプリケーションをロックダウンするので、これは問題を引き起こす可能性があります

これで、独自のロング ポーリング メカニズムを実装できました。これを処理する方法に関するベストプラクティスはありますか? セッション ID をキーとして、BlockingQueue 内のメッセージを値として、シングルトンの ConcurrentMap を維持できると考えていました。ワーカー スレッドはメッセージを適切な BlockingQueue に入れ、メッセージの要求がセッションに着信すると、ターミナル メッセージが送信されるまでブロッキング キューから削除されます。しかし、クライアントがメッセージ キューを使い果たすために戻ってこない場合はどうなるかという問題があります。どうすればきれいになりますか?これを実装するためのより良い方法があると直感していますが、それが何であるかはわかりません。誰かがここで私にいくつかのガイダンスを与えることができますか?

4

1 に答える 1

0

私が昨日投稿した以下の投稿を参照してください。

スタックオーバーフローサイトの更新メッセージがどのように表示されているか

回答の中で、@WernerVesteråsはDWRについて言及しました

別の回答で、@Nambariは彗星についても言及しました。

それはあなたに役立つようです。

私もKaazingに出くわしました

プッシュ通知のようなこともしています

それが役に立てば幸い

于 2012-10-10T10:05:49.770 に答える