サーブレット3.0非同期サポートをSpringMVCと統合したいと思います。何かのようなもの:
@RequestMapping("/chat")
@WebServlet(name="myServlet", asyncSupported=true)
public String getMessage(String userName) {
......
}
出来ますか?
サーブレット3.0非同期サポートをSpringMVCと統合したいと思います。何かのようなもの:
@RequestMapping("/chat")
@WebServlet(name="myServlet", asyncSupported=true)
public String getMessage(String userName) {
......
}
出来ますか?
それほど高速ではなく、適切なロング ポーリングを実装するのはそれほど簡単ではありません。あなたが言及した方法はうまく機能しますが、「スレッド飢餓」という深刻な問題があります
ロング ポーリングごとに 1 つのスレッドが使用されます。1000 人の同時ユーザーがいる場合、ロング ポーリング リクエストを処理するには 1000 のスレッドが必要になります (ほとんどの場合、クライアント ブラウザでサーバー側のステータスが更新されます)。
Jetty 6 には、実際のアプリケーション ロジックで使用される長いポーリング リクエストのスレッドを巧みに解放する継続パターンがあります。
Spring Framework 3.x ではまだ実装されていません。https://jira.springframework.org/browse/SPR-5587およびhttps://jira.springsource.org/browse/SPR-8517を参照してください。
コメットのサポート (ロングポーリング ajax) が必要な場合は、CometD ( http://cometd.org/documentation/cometd-java/server/services/integration-spring ) を試すことができます。しかし、私はそれを落としたことをあなたに警告します。(長いポーリングのような単純なことには、何日もの構成が必要ですか??!)
Spring3 にいくつかの RESTful コントローラーを実装し、長いポーリングを自分でプログラムするだけです。Ajax スタイルのリクエストをサーバーに送信します。コントローラーは、サーバーがブラウザーに送信する新しいデータを取得するまで、リクエストを開いたままにします。ブラウザは、後続のイベントを取得するために、新しいロング ポーリング リクエストを開始します。接続タイムアウトを回避するには、クライアントにリクエストを繰り返させるダミー値を返すだけです。
単純で簡単な方法は、ほとんどの場合、最善の解決策です。
質問はかなり古いですが、まだ答えられていません。著者は Spring MVC での非同期サポートを望んでいましたが、解決策はまだ提供されていません。
前の回答で述べたように、非同期サポート リクエストは spring community bugtracker に送信され、Spring 3.1.0 で実装される予定でした。これは最近リリースされましたが、リリース ノートによると、「サーブレット 3.0 サポート」はバージョン 3.2.0 で行われる予定です: https://jira.springsource.org/browse/SEC-1685
アプリケーションには非常に効率的な COMET が必要です。私の現在の実装は、次の例に基づいています: http://code.google.com/p/jquery-stream/wiki/EchoExampleですが、Spring MVC コントローラーに移動することに興味があります。今のところ、サンプルを改善し、Spring Bean を手動で注入して、アプリケーションの残りの部分と通信できるようにしました。私の質問で説明されているように、いくつかの問題がありました: Tomcat 7 Async Processing failing - only one request processing同時に. 今のところ、問題なく動作しています。
jboss ソリューションを使用する例を見つけました: http://docs.jboss.org/resteasy/docs/1.0.0.GA/userguide/html/Asynchronous_HTTP_Request_Processing.htmlですが、jboss を使用することは解決策ではありません。JBoss は大きすぎ、遅すぎ、開発が難しすぎます。
素晴らしいAtmosphereライブラリを使用して、これを行うことができます。
Spring MVC の例を次に示します: https://github.com/ghillert/atmosphere-spring-web-mvc
Servlet 3.0 非同期サポートは現在検討中です。反映してほしい特定のシナリオがある場合は、SPR-8517 の下にコメントするか、チケットを見て議論に従ってください。