2011-07-23 5 views
2

私はいくつかのAPIをWeb上で照会するGrailsアプリケーションを構築しています。問題は、このクエリが非常に時間がかかり、ユーザーが1つのボタンをクリックしてページ内の何も変わらないまま多くの時間を待つことが本当に面倒です。Grails:サーバーツークライアント通知

私のアプリケーションの基本的なアーキテクチャは、ユーザーがボタンをクリックすると、クライアント側がプロトタイプライブラリを使ってサーバー側にAjaxリクエストを実行します。サーバー側は、Last.fm APIに接続し、イベントのリストを取得します。サーバー側がイベントをリストに入力すると、JSON応答をクライアント側に送信し、クライアント側でGoogleマップ上の各イベントのマーカーを作成できます。

私が達成したいのは、JSON応答を送信するためにAPIから取得されるすべてのイベントを待つのではなく、クライアント側が1つのイベントを取得するとすぐにJSON応答を送信することです他のイベントがまだ検索されている間はマップに戻ります。

どのように私はこれを実装できますか?私はAjax Pushのコンセプトについて読んでいますが、必要なものかどうかはわかりません。 助けてくれてありがとう!

答えて

1

サーバーが接続する可能性のあるクライアントでリスニング接続を開く方法はありません。代わりに、必要なのは、生きていてイベントを受け取るために使用できるサーバーへの接続です。このようにして、last.fmリクエストが完了した後、直接「アクション」リクエストを返し、永続的イベント接続を介してクライアントに通知することができます。

つまり、実装する方法はajax keep aliveを使用しています。

+0

ありがとう、私はあなたが何を意味知っていると思うが、私はプロトタイプで生き続けるこのajaxを実装する方法の例を見つけることができません。いくつかの例を教えてもらえますか? –

+0

私はプロトタイプの詳細を知らないが、単純に "イベントリスニング"リクエストを開始し、いくつかのモニタオブジェクトを使って要求を処理するGrailsスレッドをスリープ状態にすることができます。いったんイベントが他のスレッドによって生成されると、そのモニターオブジェクトに通知することができ、「イベントリスニング」要求が完了します。次に、クライアントから別のリッスン要求を送信できます。それは理にかなっていますか? – fabiangebert

+0

本当にありません。私はマルチスレッドの経験がほとんどないので、これらの概念を理解するのは難しいですが、とにかく感謝します。私はAtmosphereプラグインを使用したAjaxプッシュに基づく別のアプローチを試しています。 –