今回は、ピアアシストネットワーク内のポストの実現です。
ポストによるデータ送信
ポストは、ピアアシストネットワークの全てのノードに対してメッセージを送信する機能です。チャットのような多対多の通信に向いた通信手段です。ベストエフォート型の配信のため、メッセージの到着は必ずしも保障されません。
ポストを実行するには、NetGroup クラスの post() メソッドを実行します。
public function post(message:Object):String
引数には送信されるオブジェクトを渡します。このオブジェクトに適当な値を設定しておきます。
下はその 1 例です。チャット文字列と一緒にいくつかの送信者側情報を送っています。前回の記事とあわせてお使いください。
// 送信用オブジェクトの生成 var message:Object = new Object; // データの設定 message.user = userNameText.text; message.text = chatText.text; message.sequence = sequenceNumber++; message.sender = netConnection.nearID; // post() の実行 _netGroup.post(message);
ポストされたデータの受信
次はメッセージの受け取り方です。
ポストされたデータが届くと、NetStatusEvent イベントが発生します。このときのコードは NetGroup.Posting.Notify です。
このコードに対する処理をイベントハンドラー内に記述します。
// NetStatusEvent を処理 private function netStatusHandler(event:NetStatusEvent):void { switch(event.info.code){ // ... // ポストデータ到着の通知 case "NetGroup.Posting.Notify": onPosting(event.info.messageID, event.info.message); break; // ... } }
イベントコードが NetGroup.Posting.Notify のときには、送られたオブジェクトを event.info.message から、メッセージ ID を event.info.messageID から取得できます。
以上の処理で、グループ内全てのノードがメッセージを受信できます。1 対1 型と比べるとずいぶん簡単です。1 対1 型であれば、メッセージを送信する全てのノードの ID とセッションを管理する必要がありました。ピアアシストネットワークでは、ネットワークが勝手に全ノードに配信してくれます。
NetGroupInfo クラス
NetGroupInfo クラスは RTMFP 上の通信状況に関する統計情報を持つクラスです。NetGroup.info 属性からアクセスでき、その時点の QoS のスナップショットを知ることができます。
public function get info():NetGroupInfo
NetGroupInfo クラスは、NetGroup の各通信機能 (ポスト、オブジェクト複製、ダイレクトルーティング) それぞれについての状況を属性値として保持しています。
ポスト関係は以下の4つがあります。
postingReceiveControlBytesPerSecond : 受信している制御データの秒あたりのバイト数 postingReceiveDataBytesPerSecond : 受信しているポストデータの秒あたりのバイト数 postingSendControlBytesPerSecond : 送信している制御データの秒あたりのバイト数 postingSendDataBytesPerSecond : 送信しているポストデータの秒あたりのバイト数
受信メッセージ、送信メッセージそれぞれについて、実際のデータと制御用のデータが秒あたり何バイトこのノードに、あるいはこのノードから送られたかがわかります。
そのほかには、オブジェクト複製によるデータ送受信の状況として以下の 2 つ、
objectReplicationReceiveBytesPerSecond : 受信しているデータの秒あたりのバイト数 objectReplicationSendBytesPerSecond : 送信しているデータの秒あたりのバイト数
ダイレクトルーティングによるデータ送受信の状況として以下の 2 つ、
routingReceiveBytesPerSecond : 受信しているメッセージの秒あたりのバイト数 routingSendBytesPerSecond : 送信しているメッセージの秒あたりのバイト数
の属性があります。
コメントする