2007.06.18
category
comments

AMFPHPを試す

AMF通信をやってみる。まずはFlash Remoting用のコンポーネントをダウンロードしてインストールする。

次にamfphpをダウンロード。現時点でのバージョンはamfphp-1.2.6。解凍してamfphpフォルダごとlocalhost直下にアップする。

今回の場合はhttp://localhost/amfphp/browser/index.htmlにアクセスしてデフォルト画面が表示されていればインストール成功となる。この画面がサービスブラウザとなりコードの修正や引数のやりとりを確認する事ができる。ここからはサービス用のphpファイルとflaファイルを作成。

HelloWorld.php(クラス名とファイル名を統一すること)

class HelloWorld
{
    //-----[AMFPHPのテーブル設定]
    function HelloWorld()
    {
        $this->methodTable = array
        (
            "say" => array
            (
                "access" => "remote",
                "description" => "文字列を返します"
            )
        );
    }

    //-----[flashから呼ばれる関数]
    function say($sArgments)
    {
        return 'You said: ' . $sArgments;
    }
}

フラッシュからの引数は$sArgmentsに格納される。このphpをhttp://localhost/amfphp/servicesにアップする。
※この状態でサービスブラウザにアクセスするとHelloWorldがサービスとして登録される。

HelloWorld.fla(ルートの1フレーム目)

import mx.remoting.*;
import mx.rpc.*;
import mx.remoting.debug.NetDebug;

var gatewayUrl:String = "http://localhost/amfphp/gateway.php";

NetDebug.initialize();
var _service:Service = new Service(gatewayUrl, null, 'HelloWorld', null , null);
var pc:PendingCall = _service.say("Hello!");
pc.responder = new RelayResponder(this, "handleResult", "handleError");

function handleResult(re:ResultEvent)
{
    trace(re.result);
}

function handleError(fe:FaultEvent)
{
    trace("エラー");
}

トレースすると”You said: Hello!”が出力される。xmlを経由しなくてもphpとflashでオブジェクトのやりとりが出来るので便利。DBからセレクトしたデータをflashに直接渡したり、phpに配列を渡したりとかなりお手軽にできそう。ここまでくるとMovableTypeとかでxmlを出力してflashに読み込ませるCMS的パターンは壊滅なんじゃないかと。従来のXMLを読み込んでパースかけるやり方よりも高速に送受信ができるらしい。なるほど。

page 1 / 11