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ベースの高速データ配信の導入」のどれか