BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Atmosphere 1.0:Java/JavaScript用の非同期通信

Atmosphere 1.0:Java/JavaScript用の非同期通信

原文(投稿日:2012/10/31)へのリンク

Atmosphere 1.0は、新しいJava / Scalaの/ Groovyのフレームワークで Webブラウザとアプリケーションサーバ間の非同期通信の抽象化を試みる。利用可能な場合、それはフォールバックとして、ロングポーリングを使い、Webソケット、HTML5のサーバーサイドのイベントおよびその他のアプリケーション・サーバー固有のソリューションを透過的にサポートする。

もともとWebアプリケーションは、クライアントが常にサーバーへの接続を開始する、クライアント/サーバモデルに基づいて構築された。リアルタイム通信フィーチャを必要とする、ダッシュボード、ティッカー、オンラインチャットのような特定の種類のアプリケーションに対して、従来のHTTPリクエスト/レスポンスのサイクルは、十分ではない。これらの場合では、サーバは、非同期方法で(イベントが使える場合)、クライアント(Webブラウザ)にデータをプッシュすることができなければならない。

この要件は、最近のAJAXベースのリッチインターネットアプリケーションで特に明らかになった。これらは、よりダイナミックなアプローチのために、ページ全体の更新を諦め、新しいデータがアプリケーション・サーバから入手できるときに、ページの一部だけが更新される。最も基本的な解決策は、ポーリングを使用することで、その場合、クライアントは継続的にアップデート(おそらくある間隔で)をサーバーに尋ねる。このシンプルなアプローチは、特別な支援を必要としないが、帯域幅の面で問題になりえる。サーバーは簡単に複数のクライアントによる負荷に耐えられなくなる。例え新しいデータが実際には無いときでもそうなる。

非同期通信のもう一つのアプローチは、HTTPストリーミング (Comet としても知られている)。このソリューションでは、ブラウザがサーバに接続することを強制し、次に指定した時間の間(無限大にもできる)、接続を開いたままにする。サーバーにブラウザにプッシュバックする必要のあるイベントがあるとき、サーバーは、この永続的な接続を使用する(すでに開いている)。このソリューションでは、いくつかの制限もある。永続的接続は、リソースを非常に食い、プロキシやファイアウォールが突然シャットダウンする可能性があり、ブラウザはアプリケーションサーバーあたりの接続数が制限される。

すべてのこれらのソリューションはまた、非標準である。Comet は、本質的に、上記のコンセプトに従っているいくつかの実装向けの広範な用語である。標準の取組みは、WebSocketsの形で現れている。WebSocketを、最初から非同期通信をターゲットに設計された新しいネットワーク・プロトコルだ。しかし、このプロトコルは、Webブラウザとアプリケーションサーバーの両方からの明白なサポートを必要としている。かつてそれらの両方がHTTP接続をweb socketに"アップグレード"することで同意した。WebSocketのプログラミングするのも独自の問題を抱えている。現時点では、各アプリケーション・サーバーは独自のAPIを持っているので、その結果、簡単にベンダーロックインなってしまうからである。

AtmosphereはJavaフレームワーク (GroovyScalaもサポートされる)であり、これら全てのソリューションの抽象として機能する。そのおかげで、開発者は、低レベルのコミュニケーションの詳細を扱わずに、実際のビジネスロジックにフォーカスできる。開発者は、統一された Atmosphere APIに対してプログラムする。このAPIが舞台裏でサポートするのが以下である。

同時にAtmosphere はまた、JavaScriptモジュール (jQueryをサポートしている)を提供するが、これはクライアント側に存在し、非同期サポートに関して、webブラウザーの機能を抽象化する。接続の両端を制御することが Atmosphereによって提供されている抽象化の主要コンセプトである。サポートされるアプリケーション・サーバーとブラウザーに関して詳細な文書がある。

Atmosphere の大きなフィーチャは、利用可能であれば(例えば、WebSocket)、自動的に最も効率的なソリューションを使用するという事実であり、フォールバックソリューション(例えばロングポーリングを)もサポートしている。それは、クライアントとサーバーの間でサポートされているものを事前に検出することも可能である。Atmosphere は Nettosphereを使って、非サーブレットコンテナ で実行できることに注意して欲しい。

基本的なAPIの他に、 Atmosphereにはプラグイン/拡張があり、以下のものに統合できる。

  • REST/Jersey
  • GWT/Vaadin
  • Socket.io
  • Spring
  • Guice
  • Wicket
  • PrimeFaces/RichFaces

詳細については、WikiSamples, FAQJavadocsを見て欲しい。

Kostis Kapelonis エンタープライズアプリケーションを専門にするソフトウェアエンジニア

この記事に星をつける

おすすめ度
スタイル

BT