跳到主要内容

本周项目:WebTorrent

·10 分钟阅读

本周我们采访了 @feross@dcposch,讨论了 WebTorrent,这是一个由网络驱动的 BT 客户端,它将用户连接起来,形成一个分布式、去中心化的浏览器到浏览器网络。


什么是 WebTorrent?

WebTorrent 是第一个在浏览器中运行的 BT 客户端。它完全用 JavaScript 编写,可以使用 WebRTC 进行点对点传输。无需浏览器插件、扩展或安装。

WebTorrent 使用开放的网络标准,将网站用户连接起来,形成一个分布式、去中心化的浏览器到浏览器网络,以实现高效的文件传输。

你可以在这里看到 WebTorrent 的实际演示:webtorrent.io

webtorrent homepage

这有什么酷的?

想象一下像 YouTube 这样的视频网站,但访问者可以帮助托管网站内容。使用 WebTorrent 驱动的网站的人越多,它就变得越快、越有弹性。

浏览器到浏览器通信消除了中间人,让人们可以按照自己的意愿进行通信。不再有客户端/服务器——只有一个由对等点组成的网络,所有对等点都是平等的。WebTorrent 是重新去中心化网络旅程的第一步。

Electron 在其中扮演什么角色?

大约一年前,我们决定构建 WebTorrent Desktop,这是一个作为桌面应用运行的 WebTorrent 版本。

WebTorrent Desktop player window

我们创建 WebTorrent Desktop 的原因有三个:

  1. 我们想要一个干净、轻量、无广告、开源的 BT 应用
  2. 我们想要一个具有良好流媒体支持的 BT 应用
  3. 我们需要一个连接 BitTorrent 和 WebTorrent 网络的“混合客户端”

如果我们已经在网页浏览器中可以下载 BT 种子,为什么还需要桌面应用?

首先,介绍一下 WebTorrent 的设计背景。

webtorrent desktop logo

早期,BitTorrent 使用 TCP 作为其传输协议。后来,uTP 出现,承诺比 TCP 更好的性能和额外的优势。每个主流 BT 客户端最终都采用了 uTP,今天你可以在这两种协议上使用 BitTorrent。WebRTC 协议是下一个合乎逻辑的步骤。它带来了与网页浏览器互操作的承诺——一个由所有桌面 BitTorrent 客户端和数百万网页浏览器组成的巨大 P2P 网络。

“网络对等点”(在网页浏览器中运行的 BT 对等点)通过增加数百万个新对等点,并将 BitTorrent 传播到数十个新用例,从而使 BitTorrent 网络更强大。WebTorrent 尽可能地遵循 BitTorrent 规范,以便现有 BitTorrent 客户端可以轻松添加对 WebTorrent 的支持。

Vuze 这样的一些 BT 应用已经支持网络对等点,但我们不想等待其他应用也添加支持。所以基本上,WebTorrent Desktop 是我们加速 WebTorrent 协议普及的方式。通过制作一个人们真正想使用的出色 BT 应用,我们增加了网络中可以与网络对等点(即网站上的用户)共享 BT 种子的对等点数量。

除了人们已经知道的用途,BT 种子还有哪些有趣的用例?

WebTorrent 最激动人心的用途之一是点对点辅助交付。像 维基百科互联网档案馆 这样的非营利项目可以通过让访问者贡献力量来降低带宽和托管成本。热门内容可以快速、廉价地通过浏览器到浏览器的方式提供。很少访问的内容可以从源服务器通过 HTTP 可靠地提供。

互联网档案馆实际上已经更新了他们的 BT 文件,使其与 WebTorrent 配合得很好。因此,如果你想在你的网站上嵌入互联网档案馆的内容,你可以通过这种方式降低互联网档案馆的托管成本,使他们能够投入更多资金来实际存档网络!

还有一些令人兴奋的商业用例,从 CDN 到通过 P2P 进行应用交付。

你最喜欢哪些使用 WebTorrent 的项目?

gaia app screenshot

用 WebTorrent 构建的最酷的东西,毫无疑问,可能是 盖亚 3D 星图。这是一个漂亮的银河系 3D 交互式模拟。数据直接从 BT 种子加载到你的浏览器中。穿越我们的星系,并意识到人类与宇宙的浩瀚相比是多么渺小,这令人敬畏。

你可以在 Torrenting The Galaxy 这篇博客文章中了解它是如何制作的,作者 Charlie Hoey 在其中解释了他是如何使用 WebGL 和 WebTorrent 构建星图的。

brave logo

我们也是 Brave 的忠实粉丝。Brave 是一款自动拦截广告和追踪器以使网页更快、更安全的浏览器。Brave 最近添加了 BT 支持,因此你可以无需使用单独的应用即可查看传统 BT 种子。该功能由 WebTorrent 提供支持。

因此,就像大多数浏览器可以渲染 PDF 文件一样,Brave 可以渲染磁力链接和 BT 文件。它们只是浏览器原生支持的另一种内容类型。

Brave 的联合创始人之一实际上是 Brendan Eich,他是 JavaScript 的创造者,我们就是用这种语言编写的 WebTorrent,所以我们认为 Brave 选择集成 WebTorrent 非常酷。

你们为什么选择在 Electron 上构建 WebTorrent Desktop?

WebTorrent Desktop main window

有一种说法是 Electron 应用“臃肿”,因为它们在每个应用中都包含了整个 Chrome 内容模块。在某些情况下,这部分是真实的(一个 Electron 应用安装程序通常约为 40MB,而一个特定于操作系统的应用安装程序通常约为 20MB)。

然而,在 WebTorrent Desktop 的案例中,我们在正常操作中几乎使用了所有 Electron 功能,以及数十种 Chrome 功能。如果我们想为每个平台从头实现这些功能,构建我们的应用将花费数月甚至数年,或者我们只能发布一个平台版本。

举个例子,我们使用了 Electron 的 Dock 集成(用于显示下载进度)、菜单栏集成(用于在后台运行)、协议处理程序注册(用于打开磁力链接)、电源阻止程序(用于防止视频播放期间休眠)和自动更新器。至于 Chrome 功能,我们使用了许多:<video> 标签(用于播放多种不同视频格式)、<track> 标签(用于支持隐藏字幕)、拖放支持和 WebRTC(在原生应用中使用并非易事)。

更不用说:我们的 BT 引擎是用 JavaScript 编写的,并假定存在许多 Node API,特别是用于 TCP 和 UDP 套接字支持的 require('net')require('dgram')

基本上,Electron 正是我们所需要的,它拥有我们所需的功能集,使我们能够以创纪录的时间发布一个稳定、精美的应用。

你最喜欢 Electron 的哪些地方?

WebTorrent 库作为开源副项目已经开发了两年。我们仅用四周就完成了 WebTorrent Desktop。Electron 是我们能够如此迅速地构建和发布应用的主要原因。

正如 Node.js 使一代使用 jQuery 的前端程序员能够接触到服务器编程一样,Electron 使任何熟悉 Web 或 Node.js 开发的人都能够进行原生应用开发。Electron 极具赋能性。

网站和桌面客户端共享代码吗?

是的,webtorrent npm 包可以在 Node.js、浏览器和 Electron 中运行。完全相同的代码可以在所有环境中运行——这就是 JavaScript 的美妙之处。它是当今的通用运行时。Java Applets 曾承诺“一次编写,随处运行”的应用,但由于多种原因,这一愿景从未真正实现。而 Electron 比任何其他平台都更接近这个理想。

在构建 WebTorrent 时你遇到过哪些挑战?

在应用的早期版本中,我们努力使 UI 表现良好。我们将 BT 引擎放在与主应用窗口绘图相同的渲染器进程中,这可想而知地导致每当 BT 引擎有密集的 CPU 活动时(例如验证从对等点接收到的 BT 片段)都会出现卡顿。

我们通过将 BT 引擎移动到第二个不可见的渲染器进程来解决这个问题,我们通过 IPC 与其通信。这样,如果该进程短暂地使用了大量 CPU,UI 线程将不受影响。黄油般流畅的滚动和动画令人非常满意。

注意:我们必须将 BT 引擎放在渲染器进程中,而不是“主”进程中,因为我们需要访问 WebRTC(它只在渲染器中可用)。

Electron 应该在哪些方面进行改进?

我们希望看到的一件事是关于如何构建和发布生产就绪应用的更好文档,特别是在代码签名和自动更新等棘手主题方面。我们不得不通过深入研究源代码并在 Twitter 上四处打听来学习最佳实践!

WebTorrent Desktop 完成了吗?如果没有,接下来会做什么?

我们认为当前版本的 WebTorrent Desktop 非常出色,但总有改进的空间。我们目前正在努力改进应用的精美度、性能、字幕支持和视频编解码器支持。

如果你有兴趣参与该项目,请查看我们的 GitHub 页面

对其他开发者有用的 Electron 开发技巧有哪些?

Feross,WebTorrent Desktop 的贡献者之一,最近在 NodeConf Argentina 发表了题为“真实的 Electron:使用 JavaScript 构建跨平台桌面应用”的演讲,其中包含了发布一个精美的 Electron 应用的实用技巧。如果你已经有一个基本可用的应用,并正在努力将其提升到更高的精美度和专业水平,那么这个演讲将特别有用。

在此观看:

幻灯片在此:

DC,另一位 WebTorrent 贡献者,编写了一份你可以做的事情的清单,让你的应用感觉更精美和原生。它附带了代码示例,涵盖了 macOS Dock 集成、拖放、桌面通知以及确保你的应用快速加载等方面。