二重connect
Kamaitachi入門(その4) - ダウンロードたけし(寅年)の日記
なのでconnectについてはKamaitachi側ではon_connectとon_invoke_connectの2つをdispatchしていることになりますね。なんで2重に待ち構えるような構成にしてるんだろ?なにか意味があるような気がしますが、よくわかりません。
on_connect
はTCP接続確立時のハンドラ、on_invoke_connect
は他の関数呼び出しと同様 Flash Player から connect 関数がよばれたときに呼ばれるハンドラです。
RTMP は正直なんでこうなんだろーっていう理解不能な仕様が結構ありますのでサーバー実装だけみてると結構混乱すると思います。
クライアント側も参照すると多少マシになります。
いまは Flex SDK を使用すればフリーで as3 な swf をつくることができますので、RTMP 実装で学ぶ as3 入門というのはどうでしょうか。
あ、wonderfl もオススメですよ。
URLベースでのACLをkamaitachiにもつけた
Wowza Media ServerでSWFVerification(っぽいこと)をする方法 - blog.katsuma.tv
それなら kamaitachi でもできるよ。ってことで使いやすいようにサービス化。
AutoConnect の代わりに、AutoConnectACL というサービスを使うと URL ベースでのアクセスコントロールをつけることができるようにしてみた。
echo サンプルの例なら、
package Service::Echo;
use Moose;
extends 'Kamaitachi::Service';
with 'Kamaitachi::Service::AutoConnectACL';
sub allow_pages {
'http://www.unknownplace.org/*',
'http://unknownplace.org/*',
}
sub allow_swfs { 'http://unknownplace.org/*' }
sub on_invoke_echo {
my ($self, $session, $req) = @_;
$req->response(@{ $req->args });
}
のような感じで、AutoConnectACL
を with
して allow_pages
と allow_swfs
を定義すればそこに書かれたURLにマッチするアクセスだけを許可することが出来る。
いちおう Flash の流儀にあわせてなんか glob マッチ方式にしてるんだけど、使いにくいので正規表現でもいけるようにしてある。
sub allow_pages { qr{^https?://(www\.)?unknownplace\.org} }
とか Regexp リファレンスつかえばおk。
allow_pages
が swf の貼り付けてあるページの URL、allow_swfs
が swf 自体の URL にマッチする感じ。