2011-12-29 8 views
4

私のWebアプリケーションのバックエンドは、複数のクライアントから更新を受け取ります。このような更新が発生した場合、他のすべてのクライアントに通知する必要があります。バックエンドの更新時にフロントエンドにデータを送信

バックエンドの更新時にサーバーからすべてのWebブラウザクライアントに更新を開始するにはどうすればよいですか?

私はJBoss、JSF、Springフレームワークを使用しています。

+0

Spring自体は素晴らしいフレームワークですが、Springに直接重なるテクノロジ(EJBやCDIなど)が既に含まれているため、おそらくJBossには必要ありません。 –

答えて

6

DarthVaderのように、あなたのフロントエンドは、(一般的に)ステートレスHTMLページであると仮定しています。ブラウザ内の何か。

彗星:あなたはすべてのクライアントが自動的に変更をプッシュしたい場合、あなたは3つのオプションがあり
彗星は、本質的に要求タイムアウトの制限がないAJAX要求を行っています。あなたはリクエストを行い、そこに座って、必要に応じてデータをストリームします。これは、隠されたiFramesまたは標準XMLHTTPRequests(jQueryがあなたのためにラップすることができます)で行うことができます。この方法の詳細についてはhereをご覧ください。

ロングポーリング:
基本的に、あなたは連続的に変化するため、サーバーをポーリングするためにはJavaScript setIntervalメソッドを使用します。サーバーへの標準AJAX GET要求を行う間隔を設定するだけで、成功するたびにページを更新してください。

HTML5 WebSocketを:イベントベースのバックエンド(ツイスト、EventMachine、のNode.jsなど)のいずれかのタイプを使用
はWebSocketを理想的なソリューションとなります。すべてのクライアントをバックエンドに登録させるだけで、任意のクライアントからの送信時に、他のすべてのクライアントに変更をプッシュします。 this pageでWebSocketの詳細を読むことができます(そして良い例を見てください)。

1

フロントエンドと言うとき、あなたはステートレスなhttpクライアントについて話しています。

Webサーバーからhttpまたはステートレスクライアントには何もプッシュできません。

フロントエンドからバックエンドへの非同期コールを定期的に使用する場合は、これを行うための「トリック」。

Gmailを考えてみると、新しいメールを受け取ったときにメールを受け取ったと表示されていると思いますか? Asynchの呼び出しをGmailのサーバーに送信すると、新しいメッセージがある場合は表示されます。

したがって、クライアントはステートレスです。 Ajaxを使用してください。

これは明確ですか?

0

は...それが将来あるべき姿は、今、あなたは、基本的にサーバーにリクエストを送信しているCometとして立ち往生しているためにWebsockets

のような標準以下れるこの一周するいくつかの方法がありますそれを開いたままにして(レスポンスの終了を知らせない)、データをストリーミングするだけです(彼らが呼び出したリクエストを送信する)。定期的なポーリング。サーバに何か新しいことがあるかどうかを尋ねるために、事前定義された間隔ごとにAJAXリクエストをサーバに送信するだけです。言うまでもなく、最初の回避策では、サーバーとブラウザの両方でストリーミングサポートが必要ですが、ほとんどのシナリオではより効率的です。

関連する問題