はい、これはwebRTCのためのものです。サーバなしでブラウザ間でデータを交換するのはそうです。この作業を行うには、接続を管理するサーバー上の管理計画を考える必要があるかもしれません(あるクライアントが他のクライアントに「私はここにいます、私に接続してください...」と伝える必要があります)。クライアントが他の誰かに接続する必要がある場合、そのデータはどのクライアントにあるかです。
ヒント:websockets(およびnodejsプラグイン: 'ws')を使用してnodejでサーバーを作って、RTCが設定されてオーディオをストリームできるようになるまでクライアント間で通信します。このようなことはすべて本当に簡単ですが、洗練された痛みです。
私はあなたの質問から読むことができるので、webRTCの使用経験はありません。私のアドバイスは、WebSocketをして行くことであるこの接続でデータを交換するため
Client 1 Server Client 2
Create an RTC object
Create offer
set localdescription = offer Create RTC object
send offer -------------------> ------>set remote description to offer
Create answer
local description = answer
set remote description<-------- <------send answer
This goes both directions:
onicecandidate send ----------> ------>set ICE candidate
Connection done!
:ちょうどあなたの頭のスタートを与えるために、これは、RTCを作るために起こるために必要なものの右の順です。どちらのクライアントもwebsocketを開き、あるクライアントが何かを送るたびに、他のクライアントからwebsocket接続(オブジェクト)を取得して送信することができます。 XHRを使用すると、ブラウザに接続してデータを要求し、データがない場合はx秒後に再試行できます。
sum:ピアツーピア接続のためにwebRTCを使用して設定するのはかなり簡単ですが、誰が誰に接続すれば問題になるのでしょうか。
編集: 私の考えは、最初のクライアントがサーバーに接続し、そのデータをXHRまたはウェブソケットなどで受け取ることです。ブラウザとの互換性を望むなら、socket.ioと一緒に行きたいかもしれませんが、chromeとfirefoxだけがwebRTC(afaik)をサポートしているので、それは本当に重要ではありません。次に、ブラウザからサーバに接続するだけです。セッションIDが複数の場合、セッションIDはかなり便利なので、ダウンロードしなければならない人々と交換するだけです。
Webサーバーは、現在の接続を含むオブジェクトを返します。したがって、クライアント1が接続する場合は、そのIDを持つオブジェクトの内部に格納します。クライアント2が接続する場合は、それも保存できます。次に、最初のクライアントからwebsocketオブジェクトを取り出し、.send('your message')
を実行します。
今、どうすればいいのですか。 WebSocket(http)とwebRTC(rtc)の接続を判断するために(ws)を使用します。 pc
はピア接続オブジェクトです:window.dc = new RTCDataChannel(ICEServers);
。 sdp
は
- クライアントがサーバーに接続し、neccessarryファイルが(HTTP)ダウンロード、
SessionDescriptionProtocol
意味(私はWebページ、スクリプトやCSSを意味し、いないファイルは共有したい。)
- は、クライアントが要求します新しいセッション。 (ws)
サーバーはオブジェクト内にセッションのインスタンスを作成します。
var sessID = Math.random()。toString(36).substring(12,16);
セッション[sessID] = {};
あなたはこのセッションIDをクライアント(ws)に送信するので、これを他の人に(メールなどを使用して)送信することができます。他のユーザーはサーバー(http)(ws)に接続しますが、IDを要求しないので、それを送信します。
- サーバーはこれを受け取ると、最初のクライアントとこのクライアントの両方に、両方の当事者が準備ができているというメッセージを送信します。送信側クライアントは新しいwebRTCオブジェクトを作成し、新しいオファーを作成します(このオファーはdc.setLocalOffer(sdp)に保存されます)。これをサーバー(ws)に送信し、サーバーはこれをクライアント2(ws)に送信します。クライアントは
dc.setRemoteDescription(sdp)
を使用してそれを保存し、回答を作成します。 (dc.createAnswer()
)、dc.setLocalDescription(sdp)
(この答えを設定します。この答えは、クライアント1に送信されます。今、あなたがデータチャネルを使用することができます。
私だけworking with PeerConnectionされているように私には、データチャネルがexaclyどのように動作するかわからないが、どの特にオーディオとビデオのストリーム用です。これを使用して接続方法を調べることができます。このコードはmy repoにあります。これは 'profielwerkstuk'のためのコードがたくさんあります(学校、興味深いのはserver.jsです(これはnodejsサーバで、sdpとICE候補の交換に使用されます)。このWebページはhtdocs/mp.htmlにあります。本当に面白い)、これを行うためのJavaScriptコードはにあります。詳細については
あなたはthis exampleで見たいと思うかもしれません、とexplainments here
であり'something you want'はすでにあり、それはこれを可能にするために多くのコードを使用しています。 また、stackoverflowは準備ができたコードを要求するのではなく、質問することに注意してください。あなたがそれを望むなら、キャリア2を見てください。0、あなたのためにこれをやりたい人を見つける。
編集2: 私はあなたの答えを見ていますが、セッションオブジェクト内に配列内のすべての接続を保存し、クライアント1 - > 2,2-> 3、 3 - > 4などですが、それでも部品などに問題があります。 Torrentについて考えてみましょう。そこでは複数の人に接続し、それぞれから小さな部品をダウンロードします。それは本当に難しいです、はい、私は誰かが既に(sharefestから離れて)大きな何かをしているとは思わない。あなたが本当にこれをしたい場合は、あなた自身を最も必要とするでしょう。この問題をどのように解決するか考えてみて、stackoverflow(または他の情報サイト)を使ってrtcなどを設定する方法を探してください。
ありがとう、私はこの答えを楽しんだ! – Harry
これは速い返信です!もっと知りたいか教えてください!私はこのすべてを理解するために奮闘してきましたが、私は他人にやりたくありません! – MarijnS95
私はあなたに賞金を加えたことを見ます。この回答は十分ではありませんでした(実際に質問を増強することはありませんが、あなたが今これらの回答を読んでいることを知りたいと思った場合に編集します)か、もっと精巧な回答が必要ですか? – MarijnS95