FlexとPHPでAMFPHPを使ってAMF通信
はじめに
Flexでサーバサイドとの通信を行う際は、XMLやJSONなどのテキストベースのフォーマットを使用することが可能なのだが、AMF(ActionScript Message Format)と呼ばれるバイナリフォーマットを使用することができるらしく、このフォーマットを使うことにより軽量で高速にFlexとサーバ間との通信を行うことができるようになるらしい。
今回はそのAMFを使用してPHPとの通信をやってみたいと思います。
今回使用するAMFライブラリについて
PHPでAMF通信を行う際に用いるライブラリはいくつか公開されているそうです。
今回はその中でも古くからあり、実績もあるAMFPHPを使用してみたいと思います。
AMFPHPを使うとphpで作成したクラスがそのままFlexから呼び出すことができます。
このライブラリを使用することによりFlexからPHPのクラスを呼びだすことができます。
- AMFPHP
- http://amfphp.org/より、ダウンロード
- 「amfphp-X.X.beta.XXXXXXX.zip」を解凍しドキュメントルートに配置
- 「amfphp/gateway.php」を元にGateway.phpをドキュメントルートに作成
<?php // Gateway.php include 'amfphp/core/amf/app/Gateway.php'; function main(){ $gateway = new Gateway(); $gateway->disableDebug(); $gateway->setClassPath("."); $gateway->enableGzipCompression(25*1024); $gateway->service(); } main(); ?>
<?php // Service.php class Service{ public function returnName($name){ return $name."さん、こんにちは"; } } ?>
// hoge.mxml <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*"> <mx:Script> <![CDATA[ import mx.controls.Alert; import flash.net.*; // ゲートウェイ private const GATEWAY:String = "/Gateway.php"; // データ送信 private function doRequest():void{ // レスポンダーを作成 var responder:Responder = new Responder(onSuccess, onFault); // コネクションの作成 var connection:NetConnection = new NetConnection(); // コネクト connection.connect("http://localhost/devamfphp/Gateway.php"); connection.objectEncoding = ObjectEncoding.AMF3; // PHPのServiceクラスのreturnNameメソッドを呼び出す connection.call("Service.returnName", responder, nameText.text); } // データ取得成功 private function onSuccess(e:*):void{ // 返却値をAlertで表示 Alert.show(e.toString()); } // データ取得失敗 private function onFault(e:*):void{ Alert.show("通信失敗"); } ]]> </mx:Script> <mx:TextInput id="nameText" /> <mx:Button label="Submit" click="doRequest()"/> <mx:Label text="name" /> </mx:Application>
ちゃんと値は返ってきましたか?