Flash Remoting

Flash Remoting のデバッグ方法

Flash で http 非同期通信する Flash Remoting には AMFPHP、PHPObject、Flap、Coldfusion Component とか複数ありますが、個人的には AMFPHP が好きなのでよく使っているんですが、問題は Flash Remoting で生じるデバッグ方法。

Flash Remoting のデバッグ方法構成図
Flash Remoting のデバッグ方法構成図

Remoting 関連のデバッグには大抵 NetConnection Debugger を使ってデバッグしますが、動作が不安定であんまり使用したくありません。そのため PHP 側でテキストを作成しデバッグする"FileDumper"というクラス使用し、サーバ上でこのテキストを vi で直接開いてエラー情報を直接認識した方がかなり効率的で time-effective!実際にアプリケーション作成時にかなり助かってます。

以下、FileDumper サンプルソースになります。

この記事の続きを読む »

ページの一番上へ移動

AMFPHP 1.9-beta

Flash Remoting には様々なものがありますが、自分がよく使用しているのが AMFPHP。前までは Stable 版の AMFPHP 1.2 を使っていましたが、今年に入って個人作品レベルではづっと AMFPHP 1.9-beta を使い始め、非常に使い勝手が良くなったなあと感心。使い勝手が良くなったのは method table が無くなって関数の定義をする必要がなくなったことや、AMF 3.0 をサポートし Flex から Remote Object で接続できる様になったことなどがありますが、特に Service Browser はこれまでのデバッグ時間を確実に軽減してくれるので最高!


Service Browser は自分で作成する Remoting 用のサービスファイル(class ファイル)内で fatal error やロジックエラーがある場合の確認や、パラメータを取る場合、直接パラメータに値を渡して返り値を確認できます。データベースから select して取得した連想配列も確認できます。従来は不安定な NetConnection Debugger や個人的にクラスを埋め込んでテキスト書き出ししてデバッグを確認していましたが、Service Browser を使用したらすぐに確認できるので開発効率が相当良くなりました。FMS の administrator console っぽい直感的なインタフェースもいいし。


Service Browser のデモはココ

ページの一番上へ移動

Remoting with Flex 2.0

Flex Builder 2.0 で開発のアプリケーションから AMFPHP などのサーバプログラムに通信する際には、デフォルトでは Remote Object を使用して通信するのがスタンダードで、慣れると特に問題は無いのですが、それよりも便利な Flex framework があるんではないかと検索していたら、s2flex2-components というコンポーネントがあったのでメモ。Remoting Object では少し煩わしかった services-config.xml の様な config.xml の設定やFlex compiler への設定が無くなり、少ない労力と直感的に操作できるのでかなり快適です。

ということで Remote Object と s2flex2-components を使用した Remoting の方法について対比してみたいと思います。

この記事の続きを読む »

ページの一番上へ移動

Lightweight Remoting Framework

Lightweight Remoting Frameworkdanny patterson さんがリリースした ActionScript 3.0 のみで使用できる Remoting Framework で、サーバへの Remoting 接続が容易にできる。
ActionScript Project しか試してないけど、swc もあるんで、おそらく Flex Project 内でも使用できるではないだろうか。

使い方は凄い簡単で osflash を確認してもらえばすぐに使い方が理解できると思うんですが、この Framework というか Design Pattern を理解すれば、Custom Event とか Event Dispatcher の流れが分かるのでソースは目を通したら結構為になる。メインクラスで管理したい addEventListener で設定する任意のイベント(イベントハンドラ系)をどの様に独自にカスタマイズして dispatch するとかきっちり理解できた。

最新版は直接ブラウザからファイルを保存するか、svn checkout で取得できる。


*彼の著書 "Advanced ActionScript 3 with Design Patterns"

ページの一番上へ移動

Zend_Amf_Server

Zend Framework + AS3/Flex ユーザーの自分にとっては Zend と Adobe が提携して Zend_Amf_Server がリリースされたので、おっ!って感じで早速使ってみた。

これまでは AMF 通信の際は AMFPHP 1.9 を使っていて特にこれで問題は無いけれど、Zend Framework がインクルードされている環境では Zend_Amf_Server はすぐに使えるし、個別にパッケージをダウンロード出来るのでそれだけアップロードしても使用可能。Zend Framework ベースでデータベース連携とかするなら PHP 5 / MySQL 5 とか推奨なので、環境が無い場合はこれまで通り AMFPHP + PEAR 辺りで Flash と連携して特に問題ないと思う。一応、Cairngorm Framework とともに使ってみたけど使い勝手に特に問題ないし、外国人の開発陣も結構興奮している模様なんで、次のアプリケーション開発で環境が整う場合には、設定とか簡単だし Zend_Amf_Server を使ってみよう。

使い方。

(1)任意のサーバディレクトリに server.php(名前は何でも OK。)を作成し、下記の様に AMFServer を作成する。ブラウザ経由でこのページに直接アクセスしダウンロードが開始されるか、システムコマンドでアクセスして <p>Zend Amf Endpoint</p> と表示されたら設定完了。ただしこのままだと AMFServer が設定されただけなので、実際に Flash/Flex から呼び出す関数を持った PHP class(ここでは、Test.class.php)を setClass 関数で AMFServer インスタンスにアタッチする。また、名前空間を使用し複数のクラスをセットしたり、特定のディレクトリごとすべて含める事が出来る。これを設定する事で、Flex 側から RemoteObject の source プロパティで PHP 側のクラスファイルを記述する必要が無くなる。また、setClassMap 関数で明示的に DTO にも対応させることができるのは AMFPHP とは設定は多少違う。

AMFServer 用の php ファイル設定(http://あなたの URL/server.php)

<?php
require_once('Zend/Amf/Server.php');
require_once('class/Test.class.php');

// Zend_Amf_Server Object
$server =& new Zend_Amf_Server();
$server->setClass('Test');
//$server->setClassMap('TestVO', 'TestVO');
$response =& $server->handle();
echo $response;
?>

Test class(AMFPHP 用クラスファイル)
*今回は簡単な helloWorld 関数を持った Test クラスを作成する。

<?php
class Test {
    /**
    * Construct Function
    */
    public function __construct() {
    }
    /**
    * Function to helloWorld
    * @param  String name
    * @return String
    */
    public function helloWorld($name') {
        return 'Hello, ' . $name;
    }
}
?>

この記事の続きを読む »

ページの一番上へ移動

Zend_Amf_Server + AS3

個人的に勉強していた Zend_Amf_Server を実レベルの仕事で初めて Flash Remoting として使ってみた。プロジェクトは Flash ゲームで、もう 1 人の Flash デベロッパーと連携してゲーム以外の AS3 のバックエンド/モデルクラス/ビュークラス/コントローラ系のプログラム、Remoting 系、PHP/MySQL 開発、サーバ少々を担当。

Zend_Amf_Server は物凄くいいですね。何がいいかって Zend を普通のウェブアプリケーション感覚で開発できるので連携するバックエンド部分を MVC で組めるし、Zend_View_Smarty とか Zend_Db_Table とか Zend_Registry とか Flash と連携することを意識しないで使えるから超楽だ。Zend を使ってる Flash デベロッパーなら学習コストなし。PHP/MySQL 系のウェブアプリケーションに作っていた Zend のクラス群を Flash Remoting 用にそのまま引っ張ってきて再利用できたので、よっぽどシステムがでかくなければ簡単に作れちゃう感じですな。

で、Zend_Amf_Server で注意したい点を忘れないようにメモッておく。

この記事の続きを読む »

ページの一番上へ移動

RemoteProxy + Zend_Amf in AS3

Proxy class を extends した RemoteProxy class を作って Zend_Amf_Server にアクセス。
所謂、RemoteProxy Pattern を使用して RPC で Zend_Amf_Server 側の controller の関数をコール。

NetConnection オブジェクトで Zend_Amf_Server にアクセスする際に NetConnection.Connect.Success が NetStatusEvent で返ったのを確実に確認してから RPC しようと思ってたんだけど、NetConnection.Connect.Success って返らないんですね。NetConnection.Call.Failed などはきちんと返るんですが、接続成功時は NetStatusEvent の evt.info.code が何故か取得出来ない。

この記事の続きを読む »

ページの一番上へ移動