WebRTC vs Websockets:WebRTCがビデオ、オーディオ、およびデータを実行できる場合、なぜWebsocketが必要なのですか?[閉まっている]


219

だから私はビデオ、オーディオ、テキストを許可するチャットアプリを作りたいと思っています。どちらを使用するかを決定するために、WebsocketとWebRTCの調査に少し時間を費やしました。WebRTCを使用したビデオアプリやオーディオアプリがたくさんあるので、これは妥当な選択のように思えますが、他に考慮すべき点はありますか?ご意見をお聞かせください。

のようなもの:

  • 新しいため、WebRTCは一部のブラウザーでのみ使用できますが、WebSocketはより多くのブラウザーで使用されているようです。

  • スケーラビリティ-Websocketsはセッションにサーバーを使用し、WebRTCはp2pのようです。

  • 多重化/複数チャットルーム-Google+ハングアウトで使用されていますが、実装方法のデモアプリをまだ表示しています。

  • サーバー-Websocketsは、複数のマシン間でスケーリングするためにRedisSessionStoreまたはRabbitMQを必要とします。

回答:


272

WebRTCは、ビデオ、オーディオ、および任意のデータの高性能で高品質な通信用に設計されています。言い換えれば、あなたが説明したものとまったく同じようなアプリの場合です。

WebRTCアプリには、ネットワークとメディアメタデータを交換できるサービスが必要です。これは、シグナリングと呼ばれるプロセスです。ただし、シグナリングが行われると、ビデオ/オーディオ/データはクライアント間で直接ストリーミングされ、中間サーバーを介したストリーミングのパフォーマンスコストが回避されます。

一方、WebSocketは、クライアントとサーバー間の双方向通信用に設計されています。WebSocketを介してオーディオとビデオをストリーミングすることは可能ですが(たとえば、こちらを参照)、テクノロジーとAPIは、WebRTCのように効率的で堅牢なストリーミングを実現するように本質的に設計されていません。

他の返信で述べたように、WebSocketはシグナリングに使用できます。

私はWebRTCリソースのリストを管理しています。WebRTCに関する 2013年のGoogle I / O プレゼンテーションから始めることを強くお勧めします。


2
詳細な回答をありがとう...ほぼ2年後の更新?
Crashalot、2015

2
上記にリンクされているリソースをご覧になることをお勧めします— g.co/webrtcを参照してください。
Sam Dutton

3
また、(私は信じています)WebRTCはパケットの順序やものについてそれほど厳密ではないように構成できるので、パケット損失などを気にしない方がはるかに速くなる可能性があります(つまり、最新のデータを持つことは、すべてのデータ):stackoverflow.com/a/13051771/993683

1
ここのキーワードは当時のものだと思います。Socket.ioのポーリングフォールバック機能は冗長になりました。そのため、恐ろしいパフォーマンスコストで簡単に実装できる機能を備えたウェーハシンライブラリが残ります。私を始めさせないでください:D。
ルーク

1
@SamDutton、確かにサーバーはピアとして2倍になり、RTCDataChannel自体の一端を使用できますか?そのため、現代のWebプログラミングの場合、websocketの利点はまったくわかりませんか?RTCDataChannelはUDP /リアルタイムですか?
Pacerier

71

WebSockets:

  • すべての最新ブラウザー、さらにはweb-socket-jsポリフィルを使用したレガシーブラウザーまでサポートするIETF標準(6455)を承認しました。

  • HTTP互換のハンドシェイクとデフォルトのポートを使用して、既存のファイアウォール、プロキシ、およびWebサーバーインフラストラクチャでの使用をはるかに簡単にします。

  • はるかにシンプルなブラウザAPI。基本的に、2つのコールバックを持つ1つのコンストラクター。

  • クライアント/ブラウザからサーバーへのみ。

  • TCP上に構築されているため、信頼性の高い順序どおりのトランスポートのみをサポートします。つまり、パケットのドロップにより、後続のすべてのパケットが遅延する可能性があります。

WebRTC:

  • ChromeとFirefoxでサポートされ始めたばかりです。MSは互換性のないバリアントを提案しています。DataChannelコンポーネントは、FirefoxとChromeの間でまだ互換性がありません。

  • WebRTCは、理想的な状況ではブラウザーツーブラウザーですが、それでもほとんどの場合、接続をセットアップするためにシグナリングサーバーが必要です。現在最も一般的なシグナリングサーバーソリューションはWebSocketを使用しています。

  • トランスポート層は、接続が正しいかどうか、信頼性があるかどうかを選択できるアプリケーションで構成できます。

  • 複雑な多層ブラウザAPI。より単純なAPIを提供するJSライブラリがありますが、これらは(WebRTC自体と同様に)新しく、急速に変化しています。


4
WebRTCブラウザーのサポートは、今でははるかに優れています。caniuse.com/#search=WebRTC
tuxayo

57

WebSocketはTCPプロトコルを使用します。

WebRTCは主にUDPです。

したがって、Websocketの代わりにWebRTCを使用する主な理由は遅延です。WebSocketストリーミングを使用すると、待ち時間が長くなるか、再生が途切れて再生が途切れます。WebRTCを使用すると、VoIP通信の重要な要素である低遅延でスムーズな再生を実現できます。

ネットワークの損失、つまり2%でこれらのテクノロジーをテストしてみてください。Websocketストリームで大きな遅延が発生します。


2
興味のある人のために、このことはここでさらに説明されています:stackoverflow.com/a/13051771/993683

39

webRTCまたはwebsockets?両方を使用しないのはなぜですか。

ビデオ/オーディオ/テキストチャットを構築する場合、webRTCはピアツーピアテクノロジーを使用し、接続が確立されて実行されると、サーバーを介して通信を渡す必要がないため(TURNを使用しない限り)、間違いなく良い選択です。

webRTC通信をセットアップするときは、何らかの信号メカニズムを使用する必要があります。ここではWebsocketが良い選択ですが、webRTCはビデオ/オーディオ/テキスト情報を取得する方法です。チャットルームはシグナリングで実行されます。

ただし、お伝えしたように、すべてのブラウザーがwebRTCをサポートしているわけではないため、websocketはこれらのブラウザーにとって適切なフォールバックになる場合があります。


10

websocketとwebrtcの比較は不公平です。

WebsocketはTCPの上に基づいています。パケットの境界は、tcpとは異なり、websocketパケットのヘッダー情報から検出できます。

通常、webrtcはwebsocketを使用します。webrtcのシグナリングは定義されていません。使用したいシグナリングの種類はサービスプロバイダー次第です。SIP、HTTP、JSON、または任意のテキスト/バイナリメッセージの場合があります。

シグナリングメッセージは、WebSocketを使用して送受信できます。


10

セキュリティは見逃した側面の1つです。

WebSocketsを使用すると、データは中央のWebサーバーを経由する必要があり、通常はすべてのトラフィックを確認してアクセスできます。

WebRTCを使用すると、データはエンドツーエンドで暗号化され、サーバーを通過しません(場合によってはTURNサーバーが必要ですが、転送するメッセージの本文にはアクセスできません)。

アプリケーションによっては、これが問題になる場合と問題にならない場合があります。

大量のデータを送信する場合は、webRTCのP2Pアーキテクチャによるクラウド帯域幅コストの節約も検討する価値があります。


1
WebRTCが厳密にピアツーピアプロトコルであるというのは誤解です。サーバーベースのVOIPの代替として、業界での幅広い使用が見られ始めています。
photicSphere 2018年

また、WebRTCのメディアフローとしてWebSocketを実装する場合、SIPを使用します。SIPはVoIPに使用されているプレーンテキストプロトコルです。
M.ロスタミ

6

Webrtcは、ピアツーピア接続の一部です。ピアツーピア接続を作成する前に、ピアツーピア接続を確立するためにハンドシェイクプロセスが必要であることは誰もが知っています。また、WebSocketはハンドシェイクプロセスの役割を果たします。


3

WebsocketとWebRTCは一緒に使用できます。WebsocketはWebRTCの信号チャネルとして、webrtcはビデオ/オーディオ/テキストチャネルです。また、WebRTCはTURNリレーでもUDPにすることができ、TURNリレーはTCP HTTPもHTTPSをサポートします。多くのプロジェクトでは、WebsocketとWebRTCを一緒に使用しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.