AMFPHPを使ってみました その2

【AMFPHPを使って思ったこと】

・インストールとか設定とかが簡単。
うろ覚えですが、設定ファイルの変更は殆どありませんでした。日本語の表示もデフォルトでできていた気がします。(本当に記憶が曖昧で自信がないのですが。)インストールも、サーバの任意のディレクトリにamfphpのフォルダをUPするだけです。インストール&設定については、公式サイトのvideoチュートリアルPart 1が分かり易かったです。AMFPHPについては、全部で7編あるここのvideoチュートリアルが一番役に立つとの意見も、フォーラムにありました。


・AMFPHPのサービスブラウザが便利。
AMFPHPで使用するphpの各サービス(メソッド)の実行結果を、専用の管理画面で表示することができます。そのため、エラーが生じた時に、php側とActionScript側のどちらに問題があるのか把握しやすいです。(上記videoチュートリアルでは、phpのエラー発生時に、より詳細なエラー情報が出力されるように、phpのオプションで何かをインストールしているようなことを言っているようですが、それが何かは不明でした。)


Flash側でのXMLのパースの必要がないのが嬉しい。
僕は長いこと、XMLの解析に便利なライブラリの存在も知らずに、解析用のスクリプトをその都度愚直に自分で書いていたので、XMLと聞くと条件反射的に「う、面倒くせ」と思ってしまいます(だって自分が今どこのノードを参照しているのか、すぐに分からなくなるんだもの)。なので、XMLを介さず大規模なデータの受け渡しができてしまうのは、もの凄くありがたいです。


・サーバ側の処理も、MySQLから必要なデータを抽出するだけなら、見よう見まねでなんとかできそう。
サーバ側でもDBから取り出したデータを、いちいちXMLとして整形する必要がないので、phpスクリプトXML形式の通信の時のそれと比べて簡単に済むようです。XMLを使用したFlash/サーバ間の連携は今回のAMFPHPのチュートリアルを書いたのと同じ方が解説しているチュートリアルもあるので、まずこちらにトライしてみると、その後AMFPHPのありがたさが分かると思います。
シンプルなSQL構文とphpを覚えるだけでも、とりあえずDBからデータを抽出して、Flashに送るまでの一連の操作はできそうです。自分が踏み出せる領域が格段に広がった気がします。(錯覚でなければ)。


【よく分からないこと】

・延々とデータを送信?
ウェブブラウザのステータスバーを見ると、サーバからのデータ取得完了後もかなり長い時間「www.studio-hedgehog.comからデータを転送しています…」というメッセージが表示されているのが、気持ち悪いです。RemotingConnectionオブジェクト(NetConnectionオブジェクトのサブクラス。RemotingConnection.asとmxmlのソースは、右クリックして「ソースの表示」から確認できます。)の接続が確立したままなのかなぁと思い、コールバック関数内で、gateway.close();とか書いてみたけれど、状況は変わらず。うーん?全然分からないけれど、PHPのKeep-aliveとかいうものの設定とかなんでしょうか?


・AMFPHP3になっているのか?
チュートリアルでは、RemotingConnection.as内の、objectEncoding = ObjectEncoding.AMF1;となっていたけれど、objectEncoding = ObjectEncoding.AMF3;に書き換えてます。これでAMF3使えてるのかなぁ?
[2007/08/13追加]
ここに詳しい説明がありました。AMF3は1.2xではStringのみ対応。完全に対応しているのは1.9からみたいですね。

http://www.fxug.net/modules/xhnewbb/viewtopic.php?topic_id=664


【それ以外(初心者丸出し編)】

・セキュリティ対策とか。
ディレクトリさえ分かれば、このAMFPHPのサービスブラウザへ誰でもアクセスできてしまうので、何か設定をしておいたほうがいいのかなぁ、とちょっと心配です。


・DBへのデータ入力はマニュアルだと厳しい。
ExceliTunesのプレイリスト(xmlファイル)を読み込んで、CSVファイルとしてエクスポートしたかったのですが、やり方が分からずに断念。PhpMyAdminで、1件ずつマニュアル入力したのですが、えらい大変でした。(おかげでデータサンプルが少なくてショボい。)ここら辺のノウハウが圧倒的に不足している感じ。


MySQLのデータ型にArrayとかBooleanは存在しない。
MySQLでは、なんだかActionScriptでは見たこともないようなデータ型が存在しているのですが、Array型とかBoolean型がなくて、びっくりしました。「異なるテーブルに存在する1対多のデータ同士の関連付けはどうすればいいのかしらん?」と散々悩んだのですが、同僚のSEの方に聞くまで結局分からず。「データ関連付け用のテーブルを別に用意しなさい」との事でした。なるほどねー。


・DBへのデータ保存は恐いかも
今回自分が作ったようなサンプルなら、最悪データベースへ変なデータを書き込んでしまってもいいのですが、これが会社の仕事だったりすると、ちょっとDBへのデータの保存は、取り返しのつかないことをやらかしやしないか不安です。