Recently in BlazeDS Category

ちょっと間が空きましたが、BlazeDS を使ったサーバからのプッシュ 3 つ目の方法です。

3.Polling + Piggybacking (使用するチャネル: AMFChannel)

この方法は、昔ながらのポーリングをベースにしています。基本的には、サーバにデータの有無を確認するポーリングリクエストを定期的に繰り返し送信することでサーバから最新の情報を取得します。

それに加えて、ポーリング以外のタイミングでサーバへのリクエストを送信する際にも、そのリクエストにポーリングリクエストを付加して送信します。するとサーバは元々のリクエストに対するレスポンスに加えて、ポーリングへのレスポンスがあればそれも一緒に返します。(このように抱き合わせで送信することを指してピギーバックと呼んでいます)

さて、ポーリング+ピギーバッキングの設定例です。

引き続き BlazeDS を使ったサーバからのプッシュ機能の設定のご紹介です。

2.ストリーミングチャネルの使用 (使用するチャネル: StreamingAMFChannel)

この方法では、クライアントが HTTP リクエストをサーバに送ってクライアント・サーバ間の接続を確立すると、サーバはその接続をデータプッシュ専用のチャネルとして張りっぱなしにします。サーバからのデータは HTTP 1.1 の Transfer-Encoding: chunked を使って送信されます。(そのため HTTP 1.0 クライアントはこの方法が使えません)

ロングポーリングではサーバがデータをプッシュする度にクライアントは新しいポーリングリクエストを送りなおす必要がありましたが、ストリーミングチャネルでは一度リクエストが送られると後はサーバからのプッシュのみ繰り返しになります。ポーリングによるオーバヘッドが無いことや、より遅延の少ないデータ配信が可能であることはこの方法の利点と考えられるでしょう。

下はストリーミングチャネルの設定例です。

Flex 3 と一緒に BlazeDS がオープンソースプロジェクトとしてリリースされました。BlazeDS は RPC とサーバからのプッシュを実現するためのサーバ側のテクノロジーです。クライアント側は Flex 3 のライブラリを使用します。

BlazeDS のプロジェクトサイト(http://opensource.adobe.com/wiki/display/blazeds/BlazeDS) には GNU LGPL 下で turnkey (Tomcat 付き構成済みバイナリ)、バイナリ、ソースの 3 種類のリリースバージョンが公開されています。

また、Adobe のバグ管理サイトにも BlazeDS 用のバグデータベースが追加されました。(http://bugs.adobe.com/blazeds/) 例によって、日本語表示を選択することが可能です。

BlazeDS と Flex (もしくは AIR) アプリケーションの接続にはチャネルの指定が必要です。RPC の利用には LCDS でもおなじみの AMFChannel または HTTPChannel 等を使用しますが、サーバからのプッシュにはこれらに加えて StreamingAMFChannel やStreamingHTTPChannel 等が使用できます。

(チャネル名に含まれる AMF と HTTP による違いは送信するデータフォーマットがバイナリ形式かどうかだけなので、この記事では AMF のみ取り扱います)

さて、BlazeDS でのサーバからのプッシュの実現は、3 種類の方法から選択することができます。以下、それぞれの特徴について簡単に説明します。

BlazeDS のリリースキャンディデート (重要なバグフィックス以外はほぼそのままリリースされる予定のバージョン) が公開されました。(BlazeDS@Labs) Flash 用のクライアントライブラリが提供されないようなのがちょっと残念ですが、Flex 3 と Ajax からは直ぐに使えるようになっています。コード、サンプル、およびドキュメントのダウンロードはこちらから。(Adobe ID が必要です)