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ベースの高速データ配信の導入」のどれか
数百〜数千のPeerがネットワーク上で、自己組織的にネットワークを構築して、データやPeerを検索する仕組の構築方法」。「Torrentベースの高速データ配信の導入」のどれか