は私が...コントローラで
考え出すことができる最も簡単な例である:あなたがセットアップAJAX呼び出しをだろう、とタイムアウトに、
@RequestMapping("/longPolling")
public String longPolling(Model model) {
while(true) {
// .. Do something, break when done...
if(somethingIsDone) {
break;
}
}
return "someResponse";
}
ビューでこれを呼び出すだけでこれをもう一度呼びます。長いポーリングのアイデアは、サーバーが応答するまで応答しないということです。
Spring 3.2を使用している場合は、DeferredResult を使用するか、ハンドラメソッドからCallableを返す方が良いでしょう。 Spring 3.2より前の人は、Atmosphereのように、Springでうまく動作するようにいくつかのフレームワークを用意しています。クライアントサイドのコーディングを簡単にするJavaScript部品もあります。将来は次のとおりです。ポイントは、既存のanwser、サーブレット3 API(Tomcatの7)に来て新しいものを使用して、よりeffecient「ロングポーリング」変種と春3.2
@RequestMapping("/longPolling")
public Future<String> longPolling(Model model) {
return callSomethingWhereAFutureReturns();
}
に基づいて
DeferredResultはSpring 3.2で追加されたもので、作成したDeferredResultを別のプロセスに渡すことができます。 CallableはRunnableに似たJavaクラスです。不可能ではないが、個別のプロセスが応答を処理できるようにCallableを実装するのは難しい。 DeferredResultの動作を取得する方法について、かなりまともなブログがあります:http://blog.springsource.org/2012/05/13/spring-mvc-3-2-preview-adding-long-polling-to-an-existing -ウェブアプリケーション/ – CodeChimp