每週專案:WebTorrent
本週我們採訪了 @feross 和 @dcposch,討論關於 WebTorrent,這是一個由網路驅動的 torrent 用戶端,將使用者連接在一起,形成一個分散式、去中心化的瀏覽器對瀏覽器網路。
什麼是 WebTorrent?
WebTorrent 是第一個在瀏覽器中運作的 torrent 用戶端。它完全用 JavaScript 撰寫,並且可以使用 WebRTC 進行點對點傳輸。無需瀏覽器外掛程式、擴充功能或安裝。
透過使用開放的網路標準,WebTorrent 將網站使用者連接在一起,形成一個分散式、去中心化的瀏覽器對瀏覽器網路,以實現高效的檔案傳輸。
您可以在此處觀看 WebTorrent 運作的示範:webtorrent.io。

這有什麼酷的地方?
想像一個像 YouTube 這樣的影片網站,但訪客可以協助託管網站的內容。使用 WebTorrent 的網站使用者越多,網站就變得越快速且更具彈性。
瀏覽器對瀏覽器通訊切斷了中間人,讓人們可以按照自己的條件進行通訊。不再有用戶端/伺服器 – 只有一個對等網路,所有人都平等。WebTorrent 是重新去中心化網路旅程的第一步。
Electron 在其中扮演什麼角色?
大約一年前,我們決定建置 WebTorrent Desktop,這是 WebTorrent 的桌面應用程式版本。
我們建立 WebTorrent Desktop 的原因有三個
- 我們想要一個乾淨、輕巧、無廣告、開放原始碼的 torrent 應用程式
- 我們想要一個具有良好串流支援的 torrent 應用程式
- 我們需要一個「混合用戶端」,可以連接 BitTorrent 和 WebTorrent 網路
如果我們已經可以在我的網路瀏覽器中下載 torrent,為什麼還需要桌面應用程式?
首先,先介紹一下 WebTorrent 的設計背景。

在早期,BitTorrent 使用 TCP 作為其傳輸協定。後來,uTP 出現,承諾比 TCP 更好的效能和額外優勢。每個主流 torrent 用戶端最終都採用了 uTP,如今您可以透過任一協定使用 BitTorrent。WebRTC 協定是下一個合乎邏輯的步驟。它帶來了與網路瀏覽器互通操作的希望 – 一個由所有桌面 BitTorrent 用戶端和數百萬個網路瀏覽器組成的巨型 P2P 網路。
「網路對等點」(在網路瀏覽器中運作的 torrent 對等點)透過新增數百萬個新對等點來增強 BitTorrent 網路,並將 BitTorrent 擴展到數十個新的使用案例。WebTorrent 盡可能嚴格地遵循 BitTorrent 規範,以便現有的 BitTorrent 用戶端可以輕鬆新增對 WebTorrent 的支援。
某些 torrent 應用程式(例如 Vuze)已經支援網路對等點,但我們不想等待其他人新增支援。因此,基本上,WebTorrent Desktop 是我們加速採用 WebTorrent 協定的方式。 透過製作一個人們真正想使用的超讚 torrent 應用程式,我們增加了網路中可以與網路對等點(即網站上的使用者)共享 torrent 的對等點數量。
除了人們已經知道可以做的事情之外,torrent 還有哪些有趣的使用案例?
WebTorrent 最令人興奮的用途之一是對等輔助傳輸。像 Wikipedia 和 Internet Archive 這樣的非營利專案可以透過讓訪客貢獻來降低頻寬和託管成本。熱門內容可以透過瀏覽器對瀏覽器快速且廉價地提供。很少存取的內容可以透過 HTTP 從原始伺服器可靠地提供。
Internet Archive 實際上已經更新了他們的 torrent 檔案,使其與 WebTorrent 完美配合。因此,如果您想在您的網站上嵌入 Internet Archive 內容,您可以透過一種可以降低 Archive 託管成本的方式來完成,從而使他們能夠將更多資金投入到實際的網路存檔中!
還有令人興奮的商業使用案例,從 CDN 到透過 P2P 傳輸應用程式。
您最喜歡的哪些專案使用 WebTorrent?
使用 WebTorrent 建構的最酷的東西,絕對是 Gaia 3D 星圖。這是一個光滑的銀河系 3D 互動式模擬。資料從 torrent 加載,就在您的瀏覽器中。飛越我們的星系並意識到與浩瀚的宇宙相比,我們人類有多麼渺小,這令人嘆為觀止。
您可以在 Torrenting The Galaxy 中閱讀有關如何製作此星圖的資訊,這是一篇部落格文章,作者 Charlie Hoey 在其中解釋了他如何使用 WebGL 和 WebTorrent 建構星圖。

我們也是 Brave 的忠實粉絲。Brave 是一款自動封鎖廣告和追蹤器的瀏覽器,可使網路更快、更安全。Brave 最近新增了 torrent 支援,因此您可以無需使用單獨的應用程式即可檢視傳統 torrent。該功能由 WebTorrent 提供支援。
因此,就像大多數瀏覽器可以呈現 PDF 檔案一樣,Brave 可以呈現 magnet 連結和 torrent 檔案。它們只是瀏覽器原生支援的另一種內容類型。
Brave 的共同創辦人之一實際上是 JavaScript 的建立者 Brendan Eich,我們用 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 socket 支援。
基本上,Electron 正是我們需要的,並且擁有我們在創紀錄的時間內發布穩固、精美的應用程式所需的確切功能集。
您最喜歡 Electron 的哪些方面?
WebTorrent 程式庫已經作為一個開放原始碼的副專案開發了兩年。我們在四週內製作了 WebTorrent Desktop。 Electron 是我們能夠如此快速地建構和發布應用程式的主要原因。
正如 Node.js 使伺服器程式設計對一代使用 jQuery 的前端程式設計師來說變得容易上手一樣,Electron 使熟悉網路或 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 應用程式的實用技巧。如果您正處於擁有基本可運作應用程式的階段,並且正在嘗試將其提升到更高的潤飾和專業水準,那麼該演講尤其有用。
另一位 WebTorrent 貢獻者 DC 撰寫了 您可以做的事情的檢查清單,以使您的應用程式感覺精美且原生。它附帶程式碼範例,並涵蓋了諸如 macOS dock 整合、拖放、桌面通知以及確保您的應用程式快速載入之類的事情。