跳至主要内容

本周项目:WebTorrent

·阅读时长:9 分钟

本周,我们与 @feross@dcposch 进行了交流,讨论了 WebTorrent,这是一个基于 Web 的 torrent 客户端,它将用户连接在一起,形成一个分布式、去中心化的浏览器对浏览器网络。


什么是 WebTorrent?

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

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

您可以在此处查看 WebTorrent 的演示:webtorrent.io

webtorrent homepage

为什么它很酷?

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

浏览器对浏览器通信消除了中间人,让人们能够以自己的方式进行通信。不再是客户端/服务器 - 只是一个对等网络,所有对等方都平等。WebTorrent 是重新去中心化 Web 的第一步。

Electron 在其中扮演什么角色?

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

WebTorrent Desktop player window

我们创建 WebTorrent 桌面版有三个原因

  1. 我们想要一个简洁、轻量级、无广告、开源的 torrent 应用程序
  2. 我们想要一个具有良好流媒体支持的 torrent 应用程序
  3. 我们需要一个“混合客户端”,它可以连接 BitTorrent 和 WebTorrent 网络

如果我已经可以在我的 Web 浏览器中下载 torrent,为什么还需要一个桌面应用程序?

首先,让我们了解一下 WebTorrent 的设计。

webtorrent desktop logo

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

“Web 对等方”(在 Web 浏览器中运行的 torrent 对等方)通过添加数百万个新对等方,将 BitTorrent 网络变得更加强大,并将 BitTorrent 推广到数十个新的用例。WebTorrent 尽可能地遵循 BitTorrent 规范,以便现有的 BitTorrent 客户端可以轻松地添加对 WebTorrent 的支持。

一些 torrent 应用程序,例如 Vuze,已经支持 Web 对等方,但我们不想等待其他应用程序添加支持。因此,基本上,WebTorrent 桌面版是我们加快 WebTorrent 协议采用的方式。通过制作一个人们真正想要使用的很棒的 torrent 应用程序,我们增加了网络中可以与 Web 对等方共享 torrent 的对等方数量(即网站上的用户)。

除了人们已经知道的用途之外,torrent 还有一些有趣的用例吗?

WebTorrent 最令人兴奋的用途之一是同行辅助交付。像 维基百科互联网档案 这样的非营利项目可以通过让访问者参与进来,来降低带宽和托管成本。流行内容可以通过浏览器对浏览器快速、廉价地提供。很少访问的内容可以通过 HTTP 从源服务器可靠地提供。

互联网档案实际上已经更新了他们的 torrent 文件,使其与 WebTorrent 完美匹配。因此,如果您想将互联网档案内容嵌入到您的网站中,您可以通过一种可以降低档案托管成本的方式来实现,从而使他们能够将更多资金用于实际存档网络!

还有一些令人兴奋的商业用例,从 CDN 到通过 P2P 传递应用程序。

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

gaia app screenshot

使用 WebTorrent 构建的最酷的东西,毫无疑问,可能是 Gaia 3D 星图。它是一个光滑的 3D 交互式模拟银河系。数据直接从 torrent 加载到您的浏览器中。在我们的星系中飞行,意识到人类相对于宇宙的广阔程度是多么渺小,这真是令人惊叹。

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

brave logo

我们也是 Brave 的忠实粉丝。Brave 是一款浏览器,它会自动屏蔽广告和追踪器,从而使网页更快、更安全。Brave 最近添加了对 torrent 的支持,因此您可以 在不使用单独应用程序的情况下观看传统的 torrent。该功能由 WebTorrent 提供支持。

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

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

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

WebTorrent Desktop main window

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

但是,对于 WebTorrent Desktop,我们使用几乎所有 Electron 功能,以及在正常操作过程中使用的数十个 Chrome 功能。如果我们想为每个平台从头开始实现这些功能,构建我们的应用程序将需要几个月甚至几年的时间,或者我们只能发布一个平台。

为了了解一下,我们使用了 Electron 的 码头集成(显示下载进度),菜单栏集成(在后台运行),协议处理程序注册(打开磁力链接),节能阻止程序(在视频播放期间防止休眠),以及 自动更新程序。至于 Chrome 功能,我们使用了许多:<video> 标签(播放许多不同的视频格式),<track> 标签(用于字幕支持),拖放支持和 WebRTC(在原生应用程序中使用起来并不简单)。

更不用说:我们的 torrent 引擎是用 JavaScript 编写的,并假设存在大量的 Node API,但特别是 require('net')require('dgram') 用于 TCP 和 UDP 套接字支持。

基本上,Electron 正是我们需要的,并且拥有我们在创纪录的时间内发布一个可靠、完善的应用程序所需的全部功能。

您最喜欢 Electron 的哪些方面?

WebTorrent 库作为开源副项目已经开发了两年。我们用四周的时间制作了 WebTorrent Desktop。 Electron 是我们能够如此快速地构建和发布应用程序的主要原因。

就像 Node.js 使服务器编程对一代使用 jQuery 的前端程序员变得易于访问一样,Electron 使原生应用程序开发对任何熟悉 Web 或 Node.js 开发的人变得易于访问。Electron 非常强大。

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

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

在构建 WebTorrent 过程中遇到了哪些挑战?

在应用程序的早期版本中,我们努力使 UI 性能良好。我们将 torrent 引擎放在与绘制主应用程序窗口的相同渲染器进程中,这会导致每次 torrent 引擎(例如验证从对等点接收到的 torrent 块)进行密集的 CPU 活动时,速度都会变慢。

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

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

Electron 在哪些方面应该改进?

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

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

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

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

任何对其他开发人员可能有所帮助的 Electron 开发技巧?

Feross,WebTorrent Desktop 的一位贡献者,最近在 NodeConf Argentina 上发表了题为“真实世界的 Electron:使用 JavaScript 构建跨平台桌面应用程序” 的演讲,其中包含了一些发布完善的 Electron 应用程序的实用技巧。如果您处于拥有基本工作应用程序并试图将其提升到更完善和专业水平的阶段,该演讲尤其有用。

在这里观看:

幻灯片在这里:

DC,另一位 WebTorrent 贡献者,编写了 一个您可以做的事情清单,以使您的应用程序看起来更完善和原生。它附带代码示例,涵盖 macOS 码头集成、拖放、桌面通知以及确保您的应用程序快速加载等内容。