本周,我们采访了 @feross 和 @dcposch ,讨论了 WebTorrent,这是一款基于 Web 的 torrent 客户端,它将用户连接在一起,形成一个分布式的、去中心化的浏览器到浏览器网络。
什么是 WebTorrent?
WebTorrent 是第一个在浏览器中工作的 torrent 客户端。它完全用 JavaScript 编写,可以使用 WebRTC 进行点对点传输。无需浏览器插件、扩展程序或安装。
使用开放的 Web 标准,WebTorrent 将网站用户连接在一起,形成一个分布式的、去中心化的浏览器到浏览器网络,以实现高效的文件传输。
您可以在此处查看 WebTorrent 的演示:webtorrent.io 。
这有什么酷的地方?
想象一下一个像 YouTube 这样的视频网站,但访问者可以帮助托管网站的内容。使用 WebTorrent 的网站用户越多,网站就越快、越有弹性。
浏览器到浏览器通信切断了中间人,让人们可以按照自己的意愿进行通信。不再有客户端/服务器——只有一个对等网络,所有对等方都是平等的。WebTorrent 是网络去中心化之旅的第一步。
Electron 在其中扮演什么角色?
大约一年前,我们决定构建 WebTorrent Desktop ,这是一个作为桌面应用程序运行的 WebTorrent 版本。
我们创建 WebTorrent Desktop 有三个原因
我们想要一个干净、轻量级、无广告、开源的 torrent 应用程序
我们想要一个具有良好流媒体支持的 torrent 应用程序
我们需要一个“混合客户端”,连接 BitTorrent 和 WebTorrent 网络
如果我已经可以在 Web 浏览器中下载 torrent,为什么还需要桌面应用程序?
首先,简单介绍一下 WebTorrent 的设计背景。
早期,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 Desktop 是我们加速 WebTorrent 协议采用的方式。 通过制作一个人们真正想使用的出色的 torrent 应用程序,我们增加了网络中可以与 Web 对等方(即网站上的用户)共享 torrent 的对等方数量。
除了人们已经知道的功能之外,torrents 还有哪些有趣的用例?
WebTorrent 最令人兴奋的用途之一是对等辅助交付。像 维基百科 和 互联网档案馆 这样的非营利项目可以通过让访问者贡献带宽来降低带宽和托管成本。热门内容可以通过浏览器到浏览器快速且廉价地提供。很少访问的内容可以从源服务器通过 HTTP 可靠地提供。
互联网档案馆实际上已经更新了他们的 torrent 文件,因此它们可以很好地与 WebTorrent 配合使用。因此,如果您想在您的网站上嵌入互联网档案馆的内容,您可以以一种方式做到这一点,从而降低互联网档案馆的托管成本,使其可以将更多资金用于实际的网络存档!
还有令人兴奋的商业用例,从 CDN 到通过 P2P 交付应用程序。
您最喜欢的哪些项目使用了 WebTorrent?
用 WebTorrent 构建的最酷的东西,绝对是 Gaia 3D 星图 。这是一个光滑的 3D 交互式银河系模拟。数据从 torrent 中加载,直接在您的浏览器中加载。飞越我们的恒星系统,意识到与浩瀚的宇宙相比,我们人类是多么渺小,这令人叹为观止。
您可以在 Torrenting The Galaxy 这篇博文中了解它是如何制作的,作者 Charlie Hoey 在其中解释了他如何使用 WebGL 和 WebTorrent 构建星图。
我们也是 Brave 的忠实粉丝。Brave 是一款浏览器,可以自动阻止广告和跟踪器,使 Web 更快速、更安全。Brave 最近添加了 torrent 支持,因此您可以无需使用单独的应用程序即可查看传统的 torrent 。该功能由 WebTorrent 提供支持。
因此,就像大多数浏览器可以呈现 PDF 文件一样,Brave 可以呈现 magnet 链接和 torrent 文件。它们只是浏览器原生支持的另一种类型的内容。
Brave 的联合创始人之一实际上是 Brendan Eich,JavaScript 的创建者,我们用 JavaScript 编写了 WebTorrent,所以我们认为 Brave 选择集成 WebTorrent 非常酷。
您为什么选择在 Electron 上构建 WebTorrent Desktop?
有一种迷因认为 Electron 应用程序“臃肿”,因为它们在每个应用程序中都包含整个 Chrome 内容模块。在某些情况下,这部分是正确的(Electron 应用程序安装程序通常约为 40MB,而特定于操作系统的应用程序安装程序通常约为 20MB)。
但是,在 WebTorrent Desktop 的情况下,我们在正常操作过程中使用了几乎所有 Electron 功能和许多 Chrome 功能。如果我们想从头开始为每个平台实现这些功能,那么构建我们的应用程序将花费数月或数年的时间,或者我们将只能为单个平台发布。
为了让您了解情况,我们使用了 Electron 的 dock 集成 (显示下载进度)、菜单栏集成 (在后台运行)、协议处理程序注册 (打开 magnet 链接)、电源节省阻止程序 (防止视频播放期间进入睡眠状态)和 自动更新程序 。至于 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 Applets 承诺“一次编写,到处运行”的应用程序,但由于多种原因,这个愿景从未真正实现。Electron 比任何其他平台都更接近这个理想。
在构建 WebTorrent 时,您遇到过哪些挑战?
在应用程序的早期版本中,我们努力使 UI 具有高性能。我们将 torrent 引擎放在绘制主应用程序窗口的同一渲染器进程中,可以预见的是,每当 torrent 引擎进行密集的 CPU 活动时(例如,验证从对等方接收的 torrent 片段),就会导致速度变慢。
我们通过将 torrent 引擎移动到第二个不可见的渲染器进程来解决这个问题,我们通过 IPC 与之通信。这样,如果该进程短暂地使用了大量 CPU,UI 线程也不会受到影响。流畅的滚动和动画非常令人满意。
注意:我们不得不将 torrent 引擎放在渲染器进程中,而不是“主”进程中,因为我们需要访问 WebRTC(仅在渲染器中可用)。
Electron 应该在哪些方面改进?
我们很希望看到关于如何构建和交付生产就绪应用程序的更好文档,尤其是在代码签名和自动更新等棘手的主题方面。我们不得不通过深入研究源代码并在 Twitter 上询问来了解最佳实践!
WebTorrent Desktop 完成了吗?如果没有,接下来会推出什么?
我们认为当前版本的 WebTorrent Desktop 非常出色,但总有改进的空间。我们目前正在努力改进润色、性能、字幕支持和视频编解码器支持。
如果您有兴趣参与该项目,请查看 我们的 GitHub 页面 !
是否有任何 Electron 开发技巧可能对其他开发人员有用?
WebTorrent Desktop 的贡献者之一 Feross 最近在 NodeConf Argentina 上发表了一个题为“真实世界的 Electron:使用 JavaScript 构建跨平台桌面应用程序” 的演讲,其中包含有关发布完善的 Electron 应用程序的有用技巧。如果您正处于拥有基本可用的应用程序并试图将其提升到更高的润色和专业水平的阶段,那么该演讲尤其有用。
在此观看 :
VIDEO
幻灯片在此 :
另一位 WebTorrent 贡献者 DC 编写了 一份您可以做的事情的清单 ,以使您的应用程序感觉更完善和更原生。它附带代码示例,涵盖了诸如 macOS dock 集成、拖放、桌面通知以及确保您的应用程序快速加载之类的内容。