標準的なWebRTCを使用してピアツーピア(P2P)接続を確立するには、通常、開発者がSession Description Protocol(SDP)およびInteractive Connectivity Establishment(ICE)候補を交換するためのカスタムシグナリングインフラを構築する必要があります。like-webrtcライブラリは、シグナリング、ピアのディスカバリ、およびアイデンティティ管理を標準で処理する高レベルのAPIを提供することでこのハードルを取り除き、ブラウザ、Node.js、およびReact Nativeを越えた接続の確立を可能にします。

自動シグナリングとディスカリ

標準的なWebRTCでは、接続パラメータを交渉するために個別のシグナリングチャネルが必要です。like-webrtcは、SDPおよびICE候補の交換を自動的に処理する組み込みのシグナリングサーバー(デフォルトはWebSocket RPCプロトコル)を提供することで、これを統合します。

実装の詳細を示すlike-webrtcリポジトリのコードリスト。
ライブラリのAPIを示すlike-webrtcリポジトリのコードリストの例。github.com

この画像は、ライブラリのコード構造とAPI使用法の視覚的な例を提供します。

like-webrtc リポジトリ統計: スター 14 stars; コミット 16 commits
like-webrtc リポジトリ統計github.com

HN Digest によるグラフ(github.com の報告数値に基づく)。数値はソースの表記通りです。

単純な接続交渉を超えて、このライブラリにはピアディスカリシステムが含まれています。開発者は「トピック」を使用してピアをグループ化でき、サーバーは特定のトピックの下で自身を宣言でき、他のピアはルックアップを実行してそれらの参加者を自動的に見つけて接続することができます。

「組み込みのシグナリングとピアディスカリを備えたピアツーピアWebRTC接続。」

— GitHub - LuKks/like-webrtc: Peer-to-peer WebRTC connections with built-in signaling and peer discovery.

暗号学的アイデンティティと接続性

識別のためにIPアドレスに依存する代わりに、like-webrtcは暗号鍵ペアを使用します。各ピアは共有可能なアドレスとして機能する公開鍵を生成し、より安定した安全なピア識別を可能にします。

ピア接続のロジックを示すlike-webrtcプロジェクトのコードスニペット。
ライブラリがピア接続とアイデンティティをどのように処理するかを示すコードリスト。github.com

このスクリーンショットは、暗号学的アイデンティティと接続機能のプログラムによる実装を示しています。

このライブラリは、直接的なピアツーピアリンクや、複数のピアが共有グループに参加する「スウォーム」構成を含む、さまざまな接続タイプをサポートしています。また、データチャネル、オーディオ/ビデオトラック、およびトランシーバーをサポートし、標準のWebRTC APIとの互換性を維持しています。

デプロイと制限

このライブラリは、Webブラウザ、Node.js環境、およびReact Nativeアプリケーションで動作するように幅広い互換性を備えて設計されています。ファイアウォールやNATをバイパスするのを助けるために、STUNおよびTURNサーバーのデフォルト設定が含まれています。

注目すべき制限として、現在は著者がホストする特定のシグナリングサーバーに依存していることが挙げられます。さらに、ライブラリは接続を処理しますが、開発者はRPCリレーメッセージがエンドツーエンド(E2E)で暗号化されていることを確認する必要があります。これは、シグナリングサーバーがメタデータやメッセージの内容にアクセスするのを防ぐためです。

Hacker Newsの読者の反応

  • 疑問: あるコメント投稿者は、メンテナンス者が提供しているシグナリングサーバーを停止した場合、このライブラリで構築されたアプリケーションの長期的な生存可能性について懸念を表明しました。 コメント ↗
  • 疑問: 別のユーザーは、このライブラリがカスタムシグナリングと暗号を使用しつつ、依然として外部のSTUNおよびTURNサーバーを必要とする標準的なWebRTCとして機能するのかどうかについて明確化を求めました。 コメント ↗
  • 代替案: あるコメント投稿者は、CloudflareがTURNおよびSTUNサーバーの割り当てに対して無料枠を提供していることを指摘しました。 コメント ↗

Hacker Newsのスレッドで出た意見の要約です。事実として検証されたものではありません。 議論の全文を読む ↗