在本系列文章中,我们将介绍一些探索 Web 去中心化或分布式化后可能性的项目。这些项目与 Mozilla 无关,其中一些项目重写了我们对 Web 浏览器的认知。它们的共同点是:这些项目是开源的,开放参与,并与 Mozilla 的使命一致,即保持 Web 的开放和对所有人可访问。
当自我表达的经济成本不再成为障碍时,Web 才能保持健康。在本期 Dweb 系列文章中,我们将学习 WebTorrent - 一个在 Web 浏览器中运行的 BitTorrent 协议 实现。这种文件服务方法意味着网站可以随着同时访问网站的用户数量的增加而扩展 - 消除了在数据中心运行集中式服务器的成本。这篇文章由 WebTorrent 的创建者 Feross Aboukhadijeh 撰写,他是 PeerCDN 的联合创始人,也是一位多产的 NPM 模块作者...... 截至目前已发布了 225 个模块!-Dietrich Ayala
什么是 WebTorrent?
WebTorrent 是第一个在浏览器中运行的 torrent 客户端。它完全用 JavaScript(Web 语言)编写,并使用 WebRTC 进行真正的点对点传输。不需要任何浏览器插件、扩展或安装。
WebTorrent 利用开放式 Web 标准,将网站用户连接在一起,形成一个分布式的、去中心化的浏览器到浏览器网络,以便高效地进行文件传输。使用 WebTorrent 支持的网站的人越多,该网站的速度越快,弹性也越强。
架构
WebTorrent 协议的工作原理与 BitTorrent 协议相同,只是它使用 WebRTC 而不是 TCP 或 uTP 作为传输协议。
为了支持 WebRTC 的连接模型,我们对跟踪器协议进行了一些更改。因此,基于浏览器的 WebTorrent 客户端或“Web 对等点”只能连接到支持 WebTorrent/WebRTC 的其他客户端。
一旦对等点连接起来,用于通信的线协议与正常的 BitTorrent 中完全相同。这将使现有的流行 torrent 客户端(如 Transmission 和 uTorrent)更容易添加对 WebTorrent 的支持。 Vuze 已经支持 WebTorrent 了!
入门
只需要几行代码就可以在浏览器中下载 torrent!
要开始使用 WebTorrent,只需在页面上包含 webtorrent.min.js
脚本。您可以从 WebTorrent 网站 下载脚本,也可以 链接到 CDN 副本。
<script src="webtorrent.min.js"></script>
这将在 window
对象上提供一个 WebTorrent
函数。还有一个
npm 包 可用。
var client = new WebTorrent()
// Sintel, a free, Creative Commons movie
var torrentId = 'magnet:...' // Real torrent ids are much longer.
var torrent = client.add(torrentId)
torrent.on('ready', () => {
// Torrents can contain many files. Let's use the .mp4 file
var file = torrent.files.find(file => file.name.endsWith('.mp4'))
// Display the file by adding it to the DOM.
// Supports video, audio, image files, and more!
file.appendTo('body')
})
就是这样!现在您将看到 torrent 流式传输到网页中的 <video width="300" height="150">
标签中!
了解更多
您可以在 webtorrent.io 上了解更多信息,或者在 Freenode IRC 的 #webtorrent 或 Gitter 上提出问题。我们正在寻找更多可以回答问题并帮助 GitHub 问题跟踪器中遇到问题的人员。如果您是一个友好、乐于助人的人,并且想要一个更深入地研究 torrent 协议或 WebRTC 的借口,那么这就是您的机会!
关于 Feross Aboukhadijeh
Feross 编写了流行的开源软件,包括 WebTorrent、StandardJS 和数百个 Node.js 包(总计每月 2 亿多次下载)。他最近发布了一个名为 BitMidi 的有趣网站,该网站为您的聆听乐趣提供 MIDI 文件!他的开源工作得到了 Patreon 上慷慨捐赠者的支持。
14 条评论