RTMFP に関して Flash Player 10.1 からの大きな違いは "グループ" のサポートです。
Flash Player 10 では、(何らかの仕組みを構築しない限り) 配信したい全てのノード (Flash Player が実行されているマシン) に個別に接続する必要がありました。例えば、相手が 10 台なら 10 セッション、20 台なら 20 セッションという具合です。
これに対して、Flash Player 10.1 からは、複数のノードの集合、すなわち "グループ" に対して接続することができます。一旦グループに接続されれば、グループ内全てのノードに対して配信することができます。最近公開された Stratus ベータ 2 には、この変更にあわせグループへの仲介機能が追加されています。
さて、このグループは、ただのノードの集まりではありません。
グループは参加しているノード間で仮想のネットワーク (いわゆるオーバーレイネットワーク) を自律的に構築し、更に、経路情報の共有、最適な配信経路の判断、トポロジーの最適化等も行います。
難しいことは考えなくても、"グループ" が勝手に数千万ユーザー規模でも使える P2P ネットワークを構築してくれる (公称) ということです。お蔭で RTMFP アプリケーションの使い道もずいぶん広がったように思います。
グループが構成する仮想ネットワークはピアアシストネットワーク (Peer-Assisted Network) と呼ばれます。
グループはピアアシストネットワーク内で、データを配信するための手段をいくつか提供します。以下、ごく簡単に説明を。
ダイレクトルーティング
ピアアシストネットワーク 内では全てのノードが直接接続されているわけではありません。左図のように、円の形につながっています。つまり、最低 2 人は "お隣さん" が居ることになります。ピアアシストネットワーク内での通信は、この "お隣さん" たちを辿って、 "お隣さん" の "お隣さん" の "お隣さん" というように伝わっていきます。
これだけだとグループ内のノードが多くなるにつれて非効率になってしまいます。そこで、通信を効率的に行うために両隣以外のノードとも接続されることがあります。(これも "お隣さん" です)
ダイレクトルーティングは、自分の "お隣さん" たちの中で誰にメッセージを送るかを指定する機能です。自分の一番近くに居る "お隣さん" を指定したり、送り先の一番近くに居る "お隣さん" を指定したり、あるいは全ての "お隣さん" を指定したりできます。
オブジェクト複製
オブジェクト複製 (Object Replication) はピアアシストネットワーク内の全てのノードへ ActionScript オブジェクトのコピーを配布する機能です。クライアントに AIR を使えばファイル共有も簡単に実現できそうです。
API を使ってどのオブジェクトを持っているか或いは欲しいかという情報をグループ内に通知することができます。共有されたオブジェクトは 64 KB の大きさのブロックに分割されブロックごとばらばらに送られます。
この通信だけは、他のピアアシストネットワーク内通信と違い、完全な信頼性を提供します。他の通信手段はベストエフォートです。
ポスト
ポスト (Post) はグループ内の全ノードに ActionScript オブジェクトを送信する機能です。post() メソッドを呼ぶだけで実現できます。
どちらかと言えば、大量の送り手が時々ポストする、という使い方に適した通信です。例えば、テキストチャットの作成には向いていそうです。
上で説明したオブジェクト複製と違って、ポストでの通信はタイムアウトにより送受信が完了しないことがあります。
アプリケーションレベルマルチキャスト
アプリケーションレベルマルチキャストは、少ない遅延で大量のデータを配信したいときに使います。例えば、グループ内のあるノードが映像をパブリッシュしそれを他のノードが見るといった利用方法が想定されています。
マルチキャスト時には、ピアアシストネットワーク内の接続経路をできるだけ効率的に利用できるよう制御が行われます。ですので、沢山のノードが送信者になるような使い方には向いていません。
IP マルチキャストとの併用、または IP マルチキャストのみを行う、ということも可能です。
まとめ
ごく大雑把にまとめると上の 4 つの通信手段は以下のような感じかと。
- 経路判断はグループに任せる
- 遅延を少なく → マルチキャスト
- 信頼性が重要 → オブジェクト複製
- 多数の送信者 → ポスト
- 経路判断は自分で行う
- とりあえず → ダイレクトルーティング
コメントする