Zend Frameworkが便利だと思う今日この頃です。
MVCモデルで構築できたり、コンポーネントととして扱うこともできたり。
以前からAMF通信を試そうと思いつつも色々と面倒だったんで後回しにしていたのですが、
このZend FrameworkのZend_Amf_Serverを使うと簡単にできました。
AMFはバイナリ通信(データ圧縮もされる)なので、テキストベースの通信より軽くて早いと言われています。
FLASHとPHPの通信といえばURLVariablesで、この場合ってArrayを渡すだけでも結構大変です。
・Flash Array → JSONエンコード → PHPに送信 → PHP側でJSONデコード → PHP Array
Zend_Amf_Serverを使えば、
・Flash Array → PHPに送信 → PHP Array
単純に書くと上記のような処理になりスッキリします。
これは覚えておいて損はしないのでやってみました。
ほぼ公式のサンプルになってますが以下がソースです。
単純な文字列を送信
AMFデータを受取るPHPの作成
<?php
require_once('Zend/Amf/Server.php');
$server = new Zend_Amf_Server();
$server->setClass('Greeting');
$response = $server->handle();
echo $response;
class Greeting
{
/**
* @param string name
* @return string
*/
public function hello($name)
{
return 'Hello! ' . $name;
}
}
?>
AMFデータを送信するFLASHの作成。
import flash.net.NetConnection;
import flash.net.Responder;
var gateway:String = "http://localhost/zend_amf_greeting_20090525/amftest.php";
var connection:NetConnection = new NetConnection();
var responder:Responder = new Responder(onResultHandler, onFaultHandler);
connection.connect(gateway);
// 送信データの作成
var data:String = "HOGE";
// AMF送信
// Greetingクラスのhelloメソッドを呼び出す
connection.call("Greeting.hello", responder, data);
function onResultHandler(evt:Object):void
{
trace(String(evt));
}
function onFaultHandler(evt:Object):void
{
trace(String(evt));
}
実行するとHello! HOGEとtraceに表示されます。
Arrayを送信
<?php
require_once('Zend/Amf/Server.php');
$server = new Zend_Amf_Server();
$server->setClass('Greeting');
$response = $server->handle();
echo $response;
class Greeting
{
/**
* @param array names
* @return string
*/
public function helloAry($names)
{
$str = "";
foreach($names as $key => $val)
{
$str .= $val . ",";
}
return 'Hello!! ' . $str;
}
}
?>
import flash.net.NetConnection;
import flash.net.Responder;
var gateway:String = "http://localhost/zend_amf_greeting_20090525/amftest.php";
var connection:NetConnection = new NetConnection();
var responder:Responder = new Responder(onResultHandler, onFaultHandler);
connection.connect(gateway);
var data:Array = new Array("HOGE", "HOGE1", "HOGE2");
connection.call("Greeting.helloAry", responder, data);
function onResultHandler(evt:Object):void
{
trace(String(evt));
}
function onFaultHandler(evt:Object):void
{
trace(String(evt));
}
実行するとHello!! HOGE,HOGE1,HOGE2,とtraceに表示されます。
このような感じでArrayも直接渡せます。
Flashからのコール(Greeting.hello)が直感的で分かりやすいのも良いと思います。
NetConnectionのところにエラー系のイベントリスナーsecurityError等を登録した方がいいかもですね。
お試しアレ。
テストファイルのダウンロードはこちら
2009/5/25 - 20:30 | Comments (0)
Category : FLASH AS3


コメントはまだありません。