ちょっとブラウザから永続的なソケット接続を確立したいと考えてFlashをサーバーとJavascriptの間のプロキシとして使うことにした。

で、自分はプログラマなわけだけどFlashとか全然わかんなかったので一から試行錯誤しながら覚え始めたのだがもうひとつひとつ罠にはまりまくっている。忘れないようにメモ(もし間違ってる事とかあったら教えて下さい!)

  • swfファイルが起動した時のエントリーポイントがわからない(int main()みたいなものはいったいどこにあるのかわからなかった)→ .flaファイルを作って、そこにドキュメントクラスに設定したクラス名が起動時にインスタンスが作成されるので、そいつのコンストラクタがエントリーポイント
  • crossdomain.xml的なものは、URLStreamとかを使ってるなら同サーバー内の/crossdomain.xmlにあればいいけど、XMLSocketやSocketを使ってる場合は同名サーバーのポート843にそれ用のちょこっとしたサービスをあける必要がある。なんでHTTPとか、汎用的なプロトコルじゃないのか意味不明。
  • ちなみに"<policy-file-request/>\0"っていうリクエストが来るのでXMLを返す。なんでHTTPじゃないのか(ry
  • この手のセキュリティエラーは明確な形ではエラーとして報告されることはない。願わくばデバッグモードとかオンにしたら「ポリシーファイルがとれなかったよ!」とか教えてくれればいいのに・・・
  • 唯一の手がかりは IOErrorEvent.IO_ERROR, SecurityErrorEvent.SECURITY_ERRORとかに対してイベントリスナーを仕込んでおいて、イベント内容を出力すること。さらにそこでエラーの詳細が出ればいいのに、Error #xxxxとかコードしか出てこない。面倒くさいがぐぐれ。
  • 正規表現を使うのは気をつける。ちょっと検証はしてないのでこれはあくまで自分の勘なんだけどこう、バックトラックが多く発生する正規表現を使うとありえないくらいパフォーマンスに影響がでるような・・・?正規表現をとっぱらってindexOf() と substr() で代用したら普通に動いた。
とりあえず以上。