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