こんにちは。水野です。
前回
Kamaitachiの件を書いてから、1週間以上が経ちました。
なんだかんだで今もがつがつと使わせてもらってます。
なので今日はその、
Kamaitachiの件について。
KamaitachiはKAYACさんのtypesterさんという方が作られています。
Kamaitachiは以下のようなことをするためのPerlモジュールです。
・リアルタイム通信を行うもの
・RTMPを利用した通信
・AMFフォーマットを扱う
Kamaitachiは以下のようなモジュールを使います。
・Moose
・IO::Handle
・IO::Socket::INET
・Data::AMF
・Danga::Socket
・Danga::Socket::Callback
Kamaitachiには4種類のサンプルが入ってます。
サーバーサイドもクライアントサイドもソースが入っているので、それを参考にするとすぐにでも扱えちゃうと思います。
僕でも扱えたので。
【クライアント側】
ActionScript3辺りで、NetConnectionを使って接続します。
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, status_handler);
nc.objectEncoding = ObjectEncoding.AMF0;
nc.client = this;n.connect("rtmp://hostname/path/to/");
こんな具合。
AMFを使うので、トラフィックが少し軽減されるのかな?
プロトコルはrtmpを指定して、サーバーのPATHを書きます。
データの送信は以下のような感じ
var data:String = '送りたいデータ';
nc.call("methodname", new Responder(null), data);
methodnameはサーバーサイドのメソッド名になります。
【サーバー側】
サンプルにあるserver.plを動かします。
server.plの中にある
$kamaitachi->register_services
こいつで実際に動作させるクラスを登録してあげます。
$kamaitachi->register_services(
'path/to' => 'Service::ServiceName',
);
path/toはクライアント側でコネクトする際のパス(rtmp://hostname/path/to)です。
Service::ServiceNameは自分で用意するクラス
server.plを動かすとrtmp(1935番)をLISTENします
FMS(FCS)が使うポートですね。
次に、実際に処理をするクラスを置きます。
(lib/Service/ServiceName.pmとか)
Moose
Kamaitachi::Service
Kamaitachi::Service::AutoConnect
Kamaitachi::Service::Broadcaster
辺りを使います。
Kamaitachi::Servce::*の中が実際に使われるコードが良く書かれてます。
量がそんなに無いので、見てみると何となく理解出来ちゃうと思います。
で、用意してあげるクラスに、sub on_invoke_**** {}なんてサブルーチンを用意してあげます。
****の部分がクライアント側で
nc.call("methodname", new Responder(null), data);
で呼びだしたmethodnameになりますね。
つまり、この部分で行いたい処理を書いていきまっす。
あとはそのサブルーチンの中で値を受け取る→同じセッションの奴に値を送るなんて処理を書くだけです。
[0回]
PR