WebTorrent: サーバなしでPtoP接続を実現する

https://github.com/feross/webtorrent

1 comment | 1 point | by WazanovaNews 約3年前 edited


Jshiike 約3年前 edited | ▲upvoteする | link

昨年、「WebRTC: サーバのない世界でwebをつくり直す」で紹介したFeross Aboukhadijehは、手がけていたPeerCDNをYahoo!に売却したため、そのままYahoo!に入ったようですが、当時の「BitTorrrentをプラグインのないブラウザベースでつくろうと思っている。サーバがなく、トラックできないBitTorrentになる。」というアイデアは、そのままWebTorrentプロジェクトというかたちで継続しているようです。

そのFerossが、ハンガリーで開催されたCraftConf 2014での講演でWebTorrentの進捗についてアップデートしてくれています。

ちなみに、BitTorrentについてはこちらにわかりやすくまとまっていますが、

  • まず、.torrentファイルをwebサーバ等から取得。このファイルには手に入れたいデータの各ピースのハッシュと、トラッカーのアドレス情報が含まれている。
  • トラッカーのあるサーバに接続。どのピア(端末)が当該データを送信するネットワークに含まれているのかがわかる。
  • それらのピアと交信しPtoP接続を確立し、相互に足りないピースを取得し合って、データを受取る。

という仕組みになっています。.torrentファイル及びトラッカー情報の取得の際にサーバが必要となります。

一方、WebTorrentが目指す世界についてFerossは、

この図(ビデオ 6分10秒時点)において、オレンジで "bittorrent" と表示されているのが、BitTorrentプロトコルで通信している既存のクライアント。グリーンで "webtorrent" 表示されているのが、中間ノードとなる新しいクライアント。ブルーで表示されている "webtorrent.js" は、ブラウザで動作する。"webtorrent" は、"bittorrent" とはBitTorrentプロトコルで、 "webtorrent.js" とはWebRTC プロトコルでやりとりする。"bittorrent" と "webtorrent.js" が直接接続できないので、"webtorrent" が必要。"webtorrent" のおかげで、BitTorrentプロトコルとWebTorrentプロトコルのコンテンツをやりとりできる環境が整う。仲介役の "webtorrent" クライアントは、ネイティブアプリとしてダウンロードするかたちにできる。(つまりWebTorrentは、この仲介役のおかげで、外部のサーバに接続しないでPtoP接続が実現できるという仕組み。)

ユーザに提供しようとしているのは、

  • webtorrent.js: ブラウザ向けJavaScriptライブラリ
  • webtorrent.app: OS X / Windows / Linux向け
  • webtorrent-chrome: Chromeアプリ

の三つ。それらと、WebRTC & BitTorrentプロトコルネットワークとのやりとりにおける依存関係の全容は、この図(ビデオ 8分27秒時点)の通り。

Node.jsでつくったコードをブラウザで動作させるために、Browserifyを利用している。ブラウザは気の利いたモジュールシステムがまだないが、Browserifyは必要な依存関係をバンドルしてくれる。しかし、'net' や 'dgram' のようにnpm上にはないものはどうしたか?それらは、Node.jsのコアモジュールにある。幸い、ChromeはパーミッションがあればTCP/UDPソケットにアクセスできるAPIを提供しているので、「Node.js APIに見えるけれども実はChrome APIにコールをする。」というシムを作成し、Browserifyに 'net' や 'dgram' の際はそちらを参照するようにと記述することで対応した。

WebRTCはビデオと音声をサポートするという仕様であるが、実は任意のデータを利用できる。これのおかげで、BitTorrentと連携してありとあらゆるデータをやりとりできる。中央のサーバなしで、webサービスが提供できるようになる。

ルータがpublic IPを把握するにはNATが問題となることについては、STUNサーバを使うことで解決する。よって、WebSocketのようにSignalingサーバを介する必要はなくなる。

WebTorrentの構想は、シンプルに説明すると、既にPtoP接続を確立しているピアに紹介を頼んで、必要なピアと接続する仕組み。

WebTorrentの進捗は、GitHubレポでアップデートされています。

#webrtc #bittorrent #webtorrent #npm #node.js #browserify

Back