2010年3月10日水曜日

zlib形式で圧縮したデータをAS3.0で読み込む

Flashとwebサーバとのやりとりで、圧縮+暗号化を利用して欲しいという話がありました。調べてみたところ、Flash Player は標準で zlib アルゴリズムのみサポートしているとの事なので、それを利用することにします。Adobe AIR は、deflate アルゴリズム(GZIP などで用いられるらしい)も、利用することが出来るようです。

package 
{
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.net.URLLoader;
 import flash.net.URLLoaderDataFormat;
 import flash.net.URLRequest;

 public class Main extends Sprite 
 {

  public function Main():void 
  {
   var req:URLRequest = new URLRequest("compress_sample.php");
   var loader:URLLoader = new URLLoader(req);
   
   // ダウンロードするデータ形式をバイナリに指定する。
   loader.dataFormat = URLLoaderDataFormat.BINARY;
   
   loader.addEventListener(Event.COMPLETE, function(event:Event):void 
   {
    try {
     // zlib形式で圧縮されたデータを解凍する。
     loader.data.uncompress();
    } catch (e:Error) {
     trace(e.message);
    }
    var str:String = loader.data;
    trace(str);
   });
   
   loader.load(req);
  }
 }
}

今回はwebサーバはPHPを利用するので、PHPでの例は以下の通り。


$message = gzcompress('このメッセージを圧縮して返します。', 9);

header('Content-Type: application/x-gzip');

echo $message;

返信するデータは、JSON 形式などでも同様に扱うことができます。XML 形式でも多分一緒と思います。

0 件のコメント:

コメントを投稿