article.コミュニケーション、ゲーム、ファイル転送のために、2つのブラウザ間でデータを送信するのは、やや難解なプロセスです。データを中継するためには、お金を払ってサーバを建てたり、サーバを複数のデータセンタへ拡大する必要があります。このようなシナリオでは、レイテンシが高くなる可能性がありますし、データを秘匿するのも困難です。APIを活用して、一方のピアからもう一方のピアへデータを直接送れば、軽減できます。channelとその一般的なユースケースについて取り扱います。API、STUN、TURN、シグナリングについて、ある程度の知識が必要です。WebRTCを参照ください。Eventsがあります。WebSocketは双方向ですが、これら全ての技術はサーバとの送受信を目的として設計されています。APIと連携して動きます。これにより、レイテンシを低くすることができます。中継サーバが無く、中継するホップも少ないためです。(SCTP)を利用しており、転送方式を変更可能です:つまり、順序を考慮しない方式、順序を考慮して再送制御する方式を設定可能となります。SCTPのサポートを含むRTCDataChannelは、Chrome、Opera、Firefox(デスクトップ版、Android版)で現在利用可能です。注意:シグナリング、STUN、TURNについてWebRTCはピアツーピア間のコミュニケーションを可能にしますが、サーバは依然として必要です:シグナリング:ピア接続を確立するために、メディアやネットワークのメタ情報の交換が必要です。NATとファイアウォールの対処:ICEフレームワークの活用によりピア間の最適な経路を確立できます。ICEフレームワークは、STUNサーバ(ピア間で接続可能な外部に公開されているIPとポートの確認)とTURN(ピア間の直接の接続が失敗した場合には、データの中継が必要)と連動して動作します。signalingは、シグナリングとネットワーク、とWebRTCがどのように関連しているか、詳細に説明しています。APIは、柔軟なデータ形式をサポートしています。APIはWebSocketをそっくり真似るように設計されています。ArrayBuffer、ArrayBufferViewのようなデータ形式をサポートしています。これらの形式は、ファイル転送や多人数ゲームを実現する際に、有用です。Networkingの記事より)RTCDataChannelはUDP同様に信頼性の無いモードでも動作しますし、TCP同様に信頼性のあるモードでも動作します。これら2つのモードは、シンプルな違いがあります:信頼性の有るモードでは、メッセージの到達を保証しており、また到達される順序も保証しています。これらの処理はオーバヘッドがあるため、潜在的に動作が遅くなります。信頼性の無いモードでは、全てのメッセージがもう一方に到達されることを保証しておらず、また順序も保証しません。これによりオーバヘッドが生じないため、より早く動作します。パケットロスがなければ、これらの両方のモードの性能はおおよそ同じです。信頼性のあるモードにおいて、パケットロスが発生すると、他の後続パケットがブロックされます。ロスしたパケットは再送により到達するのを待つ必要があります。以下では、信頼性の有るモードおよび無いモードについて、どのようにRTCDataChannelで変更するかを示します。(2つのPubNubクライアント間で)これらのケースでは、ブラウザが自身にピア接続を作ります。Channelを作成し、ピア接続に応じてメッセージを送信します。Closed");};dataChannelオブジェクトは、既に確立しているピア接続から作られます。このオブジェクトは、シグナリングが起こる前後に作られます。ラベルを用いて、他のチャネル間と識別して、設定(省略可能)を行います。ミリ秒};maxRetransmits(再送が失敗するまでの試行回数)をオプションとして加えることも可能ですが、maxRetransmitsかmaxRetransmitsTimeのどちらかしか指定できません。UDPのようにするためには、maxRetransmitsを0にして、orderedをfalseに設定してください。reliability)を確認してください。channelの自動設定しない。チャネル向けに独自のIDを指定ほとんどの人が使う唯一のオプションは、最初の3つです:つまり、ordered、maxRetransmitTimes、maxRetransmitsです。SCTP(全てのブラウザせ現在サポートされています)を使えば、reliableとorderedはデフォルトでtrueとなります。アプリケーションレイヤを完全にコントロールしたければ、信頼性の無いモードを活用するのは理にかなっていますが、ほとんどのケースでは信頼性の有るモードが有効です。WebSocketと同様に、接続が確立された場合・閉じた場合・エラーが起きた場合・他方のピアからメッセージを受信した場合に、RTCDataChannelはイベントを起こします。安全?暗号化はWebRTCの全ての構成要素で必須です。(DTLS)により、保証されます。DTLSはSSLの派生で、データは標準的なSSLベースの接続と同様の安全さになります。DTLSは標準化されており、WebRTCをサポートする全てのブラウザに搭載されています。wikiを確認してください。データの考え方を変える大量のデータをJavaScriptで扱うのは苦痛となります。Sharefestの開発者が指摘するように、データについて新しい考え方が必要となります。利用可能なメモリ上限を超えてデータを転送したい場合は、データを保存するのに新しい方法を考えなければなりません。APIのような技術になります。ファイル共有アプリケーションの開発RTCDataChannelを使えば、ファイルをブラウザ間で共有するWebアプリケーションが作れます。RTCDataChannel上に作るということは、転送されるデータは暗号化され、アプリケーション提供者のサーバでは、手が加えられないことを意味します。この機能性は、複数のクライアントと迅速なファイル共有の可能性を含んでおり、WebRTCによるファイル共有を有力な候補としています。ファイルサイズが小さくて、1つのBlobに保存できるのであれば、FileAPIを用いてメモリ上に読み込み、信頼性のあるchannelを用いてファイルを送ってください(ブラウザが最大送信サイズを制限していることも忘れずに)。ファイルサイズが大きくなるにつれて、やや面倒になります。チャンキング(分割)の仕組みが必要になります:ファイルチャンク(ファイルのかたまり)を読み込み、もう一方のピアへ送ります。受信側でどのチャンクかを認識するために、メタ情報であるチャンクIDも必要です。この例やファイルをユーザのディスクに保存する場合は、チャンクをオフラインストレージ(例えば、FileAPIを活用して)に、最初に保存する必要があるでしょう。ファイル転送に、信頼性の無いモード(UDP同様)と信頼性の有るモード(TCP同様)のどちらを使うかは議論があるところです。channelを使う場合は、ACK/再送プロトコルを設計する必要があります。これは自身で実装する必要があり、たとえあなたが上手くできても、信頼性のある転送よりも大して早くならないかもしれません。信頼性があり、順序を気にしない方式であれば最適でしょうが、マルチメッシュでのファイル転送においては、結果は変わるでしょう。チャンクは、あなたのアプリケーションの最小単位です。channelでは改修される予定ですが)、チャンキングは必要です。現在の最大チャンクサイズの推奨値は、16KBです。link.click();};ファイル共有アプリのpubnub.github.io/rtc-pubnub-fileshareや、github.com/Peer5/ShareFestは、このテクニックを使っています。これらはどちらもオープンソースであり、RTCDataChannelベースのファイル共有アプリの良い出発点になります。何が出来るのでしょうか?RTCDataChannelは、ファイル共有・マルチプレイヤゲーム・コンテンツデリバリのアプリケーションの新しい作成方法への扉を開いてくれます。Breadのような、WebGLのような他の技術と併せて作られるコンテンツデリバリ:PeerCDNピアツーピアのデータ転送を通じて、Webの要素を転送するフレームワーク)で再発明されているようにアプリケーションの構築方法を変える今なら、高いパフォーマンスで低レイテンシのRTCDataChannelを使うことにより、より魅力的なアプリケーションを提供できます。SDKは、RTCDataChannelの利用を簡単にしており、多数のプラットフォームをサポートしています。RTCDataChannelの出現は、ブラウザでのデータ転送の考え方を変えうるのです。DataChannelを活用しています。Zoharの助力に感謝します。