2014年3月22日土曜日

P2P探訪 WebRTC用、SDP交換Peerを作ってみた。〜WebRTCで転送する〜

続きです。
WebRTCのPeerに、SDPデータを転送する機能を追加してみました。


WebRTCを用いてP2P通信を確立するには、SDPを交換する必要があるのでした。SDPの交換はWebRTCフレームワークで提供されていないので、自作する必要があったのでした。

今回は、WebRTCのPeerにSDPデータを交換する機能を実現してみました。
本機能によって、一度ネットワークに参加する事が出来たならば、サーバーを経由せずに、P2Pネットワークを成長させる事ができるようになります。


[仕組み]

WebSocketの場合とほとんど同じです。通信方法がWebSocketから、WebRTCのデータコネクションに変わるだけです。
仲介役のPeerが指定されたアドレス(uuid)のPeetへメッセージを送信する機能を実現するだけで良いでしょう。

例えば、以下のような感じで書けます。


function MessageTransferBase(target) {
 this.mParent = target;
        // 他のPeerからメッセージを受け取った
 MessageTransferBase.prototype.onReceiveMessage = function(caller,message) {
 };

        //仲介者(transfer)を経由して、メッセージを送信してもらう。
 MessageTransferBase.prototype._sendUnicastMessage = function(transfer, to, from, content) { 
  console.log("======sendUnicastMessage :");
  var mes = {};
  mes.messageType = "unicast";
  mes.to = to;
  mes.from = from;
  mes.content = content;
  this.mParent.getPeerList().get(transfer).caller.sendMessage(JSON.stringify(mes));
 }
        //仲介の依頼ならば、仲介してあげる。自分へのメッセージならば、受信する。
 MessageTransferBase.prototype.onTransferMessage = function(caller, message) {
     var p2pMes = JSON.parse(message);

      if("unicast" == p2pMes.messageType) {
       console.log("======onTransferMessage:");
       var mes = {};
       mes.to = p2pMes.to;
       mes.from = p2pMes.from;
       mes.content = p2pMes.content;
       mes.messageType = "transfer";
       var targetPeer = this.mParent.getPeerList().get(p2pMes.to).caller;
       targetPeer.sendMessage(JSON.stringify(mes));
      }
      else if("transfer" == p2pMes.messageType) {
       this.onReceiveMessage(caller, p2pMes);
      }
 }
}


https://github.com/kyorohiro/HelloWebRTC/blob/master/signalPeer/peer/messagetransferbase.js

[次回予告]

成果報告っぼくなってきているので、「今までの成果をノウハウとしてまとめる」。
数百〜数千のPeerがネットワーク上で、自己組織的にネットワークを構築して、データやPeerを検索する仕組の構築方法」。「Torrentベースの高速データ配信の導入」のどれか

0 件のコメント:

コメントを投稿

mbedtls dart の 開発を始めた web wasm ffi io flutter

C言語 で開発した機能を、Dart をターゲットとして、Web でも サーバーでも、そして Flutter  でも使えるようにしたい。 そこで、mbedtls の 暗号化の部分を Dart 向けのPackageを作りながら、 実現方法を試行錯誤する事にした。 dart...