feb19.jp

Nobuhiro Takahashi
Designer / Engineer

Flash RemotingとAMF

Flash RemotingとAMF

ユーザー参加型コンテンツのFlashコンテンツを作成する場合、サーバーサイドプログラムとの連携は必須になります。Flash RemotingでAMFを使った連携方法についてまとめてみました。

ユーザー参加型コンテンツを作成する場合、Flashはサーバー側のデータベースやサーバーサイドプログラムと通信を行う必要があります。簡単な通信の場合、.getURL()や.loadVariables()、または.sendAndLoad()などを用いることが可能ですが、これらの場合、通信できるデータ量に制限があったり、とくにXMLなどを用いた通信では無駄なデータを送って無駄に処理を取られてしまうため、ネットワークの大域幅を効率的に利用できないなど、大規模なコンテンツには向いていません。そこでFlash RemotingとAMFの登場です。

Adobe(Macromedia)から配布されているFlash Remotingを使います。Flash Remotingでは、サーバーサイドプログラムとのデータ連携が容易で、ColdFusionやJavaや.NETの変数やメソッドを直で呼び出せたり、バイナリやオブジェクト型で渡せたり、ログを記録したり、エラー処理を返したり、パフォーマンスを改善できたりと様々なメリットがあります。

Flash Remotingをインストールしたら、以下のような記述をActionScriptで行います。

import mx.remoting.Service;
import mx.remoting.PendingCall;
import mx.rpc.RelayResponder;
import mx.rpc.ResultEvent;
import mx.rpc.FaultEvent;
import mx.remoting.debug.NetDebug;
 
//デバッガの初期化
NetDebug.initialize();
 
//Serviceインスタンスの生成
var remoteURL:String = "http://localhost/flashservices/gateway";
var remoteServicePath:String = "greetingService";
var remoteService:Service = new Service(remoteURL, null, remoteServicePath);
 
//PendingCallインスタンス生成、Remoteサービス呼び出し
var pc:PendingCall = remoteService.greeting('Hello, World!!');
//結果を受け取るRelayResponderインスタンス生成。第二引数と第三引数に結果を処理する関数名をとる
pc.responder = new RelayResponder(this, "greeting_Result","greeting_Fault");
 
//結果表示時に呼び出されるファンクション
function greeting_Result(myResult:ResultEvent){
theMessage.text = myResult.result;
}
 
//エラー時に呼び出されるファンクション
function greeting_Fault(myFault:FaultEvent){
theMessage.text = myFault.fault.faultstring;
}

こーんな感じのスクリプトで素敵にAMFの通信が可能になります。詳しい内容はLiveDocsが参考になります。 PHPと連携させたい場合は、有志で作成されたAMF PHPもあります。

Flash CS3用のRemotingコンポーネントはまだ公式に公開されていませんが、OZACCさんが自作されたRemotingライブラリを公開なさっています。(OZACC.blog:Remoting Classes for Flash CS3 ActionScript 3.0)

Tweet Share Bookmark

Navigation

prev: ランタイムビットマップキャッシュ(.cacheAsBitmap)
next: Flash プロフェッショナル・スタイル CS3対応

Recently Entries