Aller au contenu principal

Projet de la semaine : WebTorrent

· 10 mins de lecture

Cette semaine, nous avons organisé une rencontre avec @feross et @dcposch pour parler de WebTorrent, le client torrent basé sur le Web qui connecte les utilisateurs pour former un réseau distribué et décentralisé de navigateur à navigateur.


Qu'est-ce que WebTorrent ?

WebTorrent est le premier client torrent qui fonctionne dans le navigateur. Il est écrit entièrement en JavaScript et il peut utiliser WebRTC pour les transmissions pair-à-pair. Aucun plugin, extension ou installation n'est nécessaire.

En exploitant les standards ouverts, WebTorrent connecte les utilisateurs de sites Web pour former un réseau distribué décentralisé de navigateur à navigateur, pour un transfert efficace de fichiers.

Vous pouvez voir une démonstration de WebTorrent en action ici : webtorrent.io.

page d'accueil de WebTorrent

Pourquoi c'est cool ?

Imaginez un site d'hébergement de vidéo comme YouTube, mais où les visiteurs aident à héberger le contenu du site. Plus le nombre d'utilisateurs d'un site Web propulsé par WebTorrent augmente, plus le site devient rapide et résilient.

La communication de navigateur à navigateur retire les intermédiaires et permet aux utilisateurs de communiquer selon leurs propres conditions. Plus de client/serveur – juste un réseau de pairs, tous égaux. WebTorrent est la première étape du voyage vers une nouvelle décentralisation du Web.

Et Electron dans tout ça ?

Il y a environ un an, nous avons décidé de créer WebTorrent Desktop, une version de WebTorrent qui fonctionne comme une application de bureau.

fenêtre du lecteur de WebTorrent Desktop

Nous avons créé WebTorrent Desktop pour trois raisons :

  1. Nous voulions une application torrent propre, légère, sans publicité, open source
  2. Nous voulions une application torrent avec un bon support pour la diffusion en flux
  3. Nous avons besoin d'un "client hybride" qui connecte les réseaux BitTorrent et WebTorrent

Si nous pouvons déjà télécharger des torrents dans mon navigateur web, pourquoi une application de bureau ?

Tout d'abord, un peu de contexte sur la conception de WebTorrent.

logo de WebTorrent Desktop

Au début, BitTorrent a utilisé TCP comme protocole de transport. Plus tard, uTP est arrivé, promettant de meilleures performances et des avantages supplémentaires par rapport à TCP. Les principaux client pair-à-pair ont finalement adopté uTP, et aujourd'hui vous pouvez utiliser BitTorrent sur les deux protocoles. Le protocole WebRTC est l'étape logique suivante. Il promet l’interopérabilité avec les navigateurs web – un réseau pair-à-pair géant composé de tous les clients de bureau BitTorrent et de millions de navigateurs web.

Les “pairs Web” (pair torrent qui fonctionne dans un navigateur Web) renforcent le réseau BitTorrent en ajoutant des millions de nouveaux pairs, et permettent à BitTorrent de satisfaire des dizaines de nouveaux cas d'utilisation. WebTorrent suit la spécification BitTorrent aussi près que possible pour faciliter la prise en charge des clients BitTorrent existants par WebTorrent.

Certaines applications torrent comme Vuze prennent déjà en charge les pairs web, mais nous ne voulions pas attendre le support de la part des autres clients. Fondamentalement, WebTorrent Desktop a été notre façon d'accélérer l'adoption du protocole WebTorrent. En créant une application torrent géniale que les gens veulent vraiment utiliser, nous augmentons le nombre de pairs dans le réseau qui ont la capacité partager des torrents avec des pairs web (ex : utilisateurs sur les sites Web).

Quels sont des cas d'utilisation intéressants pour les torrents au-delà de ce que les gens conaissent déjà ?

Une des utilisations les plus excitantes pour WebTorrent est la diffusion assistée par pairs. Des projets à but non lucratif comme Wikipedia et l'Internet Archive pourraient réduire la bande passante et les coûts d'hébergement en permettant aux visiteurs de contribuer. Le contenu populaire peut être servi de navigateur à navigateur, rapidement et à moindre coût. Le contenu rarement consulté peut être servi de manière fiable via HTTP à partir du serveur d'origine.

L'Internet Archive a déjà mis à jour leurs fichiers torrent pour qu'ils fonctionnent au mieux avec WebTorrent. Donc, si vous voulez intégrer du contenu de l'Internet Archive à votre site, vous pouvez le faire d'une façon qui réduire les coûts d'hébergement pour l'Archive, leur permettant de consacrer plus de ressources à l'archivage effectif du web !

Il y a aussi de multiples cas d'utilisation métier excitant, des CDN à la livraison d'applications de pair-à-pair.

Quelque projets favoris qui utilisent WebTorrent ?

capture d'écran de l'application Gaia

La chose la plus cool construite avec WebTorrent est, de loin, probablement Gaia 3D Star Map. Il s'agit d'une simulation interactive en 3D de la Voie Lactée. Les données se chargent à partir d'un torrent, directement dans votre navigateur. C'est impressionnant de voler au travers notre système stellaire et de réaliser à quel point nous, les humains, sommes insignifiants comparés à l'immensité de notre univers.

Vous pouvez lire sur la réalisation du projet dans Torrenting The Galaxy (en anglais), un article de blog où l'auteur, Charlie Hoey, explique comment il a construit la carte des étoiles avec WebGL et WebTorrent.

logo de l'application Brave

Nous sommes également des admirateurs de Brave. Brave est un navigateur qui bloque automatiquement les publicités et les pisteurs pour rendre le Web plus rapide et plus sûr. Brave à récemment ajouté le support de torrent pour que vous puissiez voir les torrents traditionnels sans utiliser une application séparée (en anglais). Cette fonctionnalité est supportée grâce à WebTorrent.

Ainsi, tout comme la façon dont la plupart des navigateurs peuvent afficher des fichiers PDF, Brave peut afficher les liens magnet et les fichiers torrents. Ce sont juste un autre type de contenu que le navigateur prend en charge nativement.

L'un des cofondateurs de Brave est Brendan Eich, le créateur de JavaScript, le langage dans lequel nous avons écrit WebTorrent, donc nous pensons qu'il est assez cool que Brave ait choisi d'intégrer WebTorrent.

Pourquoi avez-vous choisi de créer WebTorrent Desktop sur Electron?

fenêtre principale de WebTorrent Desktop

Il y a un meme que les applications Electron sont « gonflées » parce qu'elles incluent l'intégralité du module de contenu Chrome dans chaque application. Dans certains cas, c'est partiellement vrai (un installateur d'applis Electron est généralement ~40 Mo, où un installateur d'applis spécifique au système d'exploitation est généralement ~20 Mo).

Cependant, dans le cas de WebTorrent Desktop, nous utilisons presque toutes les fonctionnalités d'Electron, et des dizaines de fonctionnalités de Chrome dans le cadre d'un fonctionnement normal. Si nous voulions implémenter ces fonctionnalités de zéro pour chaque plate-forme, il aurait fallu des mois ou des années de plus pour développer notre application, ou nous n'aurions pu être publiés que pour une seule plate-forme.

Juste pour donner une idée, nous utilisons l'intégration du dock d'Electron (pour afficher la progression du téléchargement), l'intégration de la barre de menu (pour l'exécution en arrière-plan), l'enregistrement des protocoles (pour ouvrir des liens magnet), le bloqueur d'économie d'énergie (pour éviter la mise en veille pendant la lecture vidéo) et la mise à jour automatique. En ce qui concerne les fonctionnalités de Chrome, nous utilisons également une grande quantité : la balise <video> (pour lire plusieurs formats vidéo différents), la balise <track> (pour la prise en charge des sous-titres), le support du glisser-déposer et WebRTC (qui n'est pas trivial à utiliser dans une application native).

Sans oublier : notre moteur torrent est écrit en JavaScript et présuppose l'existence de nombreuses API Node, principalement require('net') et require('dgram') pour le support des socket TCP et UDP.

Fondamentalement, Electron est exactement ce dont nous avions besoin et possède exactement le jeu de fonctionnalités dont nous avions besoin pour publier une application solide et soignée en un temps record.

Quelles sont vos choses préférées à propos d'Electron?

La bibliothèque WebTorrent est en développement, en tant que projet open source, depuis deux ans. Nous avons créé WebTorrent Desktop en quatre semaines. Electron est la principale raison pour laquelle nous avons pu développer et publier notre application si rapidement.

Tout comme Node.js a rendu la programmation serveur accessible à une génération de programmeurs front-end habitués à jQuery, Electron rend le développement d'applications natives accessibles à tous ceux qui sont familiers avec Web ou le développement Node.js. Electron est extrêmement puissant.

Le site Web et le client Desktop partagent-ils leur code ?

Oui, le paquet npm webtorrent fonctionne avec Node.js, le navigateur, et dans Electron. Le même code peut s’exécuter dans tous les environnements – c’est la beauté de JavaScript. C'est la plateforme d'exécution universelle d'aujourd'hui. Les applets Java ont promis des applications « Write Once, Run Anywhere » (n.d.l.t. : écrire une seule fois, exécuter partout, ancien slogan de Sun Microsystems), mais cette vision ne s'est jamais matérialisée, pour plusieurs raisons. Electron, plus que toute autre plate-forme, se rapproche réellement de cet idéal.

Quels sont les défis que vous avez rencontrés lors de la création de WebTorrent?

Dans les premières versions de l'application, nous avons rencontré des difficultés à rendre l'interface plus performante. Nous avons mis le moteur torrent dans le processus de rendu qui dessine également la fenêtre principale de l'application, ce qui, de manière prévisible, a mené à des ralentissements à chaque fois qu'il y avait une activité CPU intense provenant du moteur de torrent (comme la vérification des segments de torrent reçus des pairs).

Nous avons corrigé cela en déplaçant le moteur de torrent dans un second processus de rendu, invisible, avec lequel nous communiquons au travers IPC. Ainsi, si ce processus utilise brièvement beaucoup de CPU, le processus responsable de l'interface utilisateur n'est pas affecté. Les animations et défilement délicats sont si satisfaisants.

Note : nous avons dû mettre le moteur torrent dans un processus de rendu au lieu d'un processus "main", parce que nous avons besoin d'accéder à WebRTC (qui n'est disponible que dans le rendu.)

Dans quels domaines faut-il améliorer Electron ?

Une chose que nous aimerions voir est une meilleure documentation sur la façon de créer et de déployer des applications adaptées à la production, principalement autour de sujets délicats comme la signature de code et la mise à jour automatique. Nous avons dû apprendre les meilleures pratiques en creusant dans le code source et en demandant sur Twitter !

WebTorrent Desktop est-il terminé ? If not, what's coming next?

Nous pensons que la version actuelle de WebTorrent Desktop est excellente, mais il est toujours possible de l'améliorer. Nous travaillons actuellement au polissage et à l'amélioration des performances, du support des sous-titres et des codecs vidéo.

Si vous souhaitez participer au projet, consultez notre page GitHub!

Quelque conseils de développement pour Electron qui pourraient être utiles à d'autres développeurs ?

Feross, l'un des contributeurs de WebTorrent Desktop a récemment donné une conférence "Real world Electron: Building Cross-platform desktop apps with JavaScript" à NodeConf Argentina qui contient des conseils utiles pour publier une application Electron polie. La conférence est particulièrement utile si vous êtes au stade où vous avez une application de travail de base et que vous essayez de la faire passer au niveau suivant du polissage et du professionnalisme.

Regarder ici (en anglais):

Présentation ici (en anglais):

DC, un autre contributeur WebTorrent, a écrit une liste des choses que vous pouvez faire (en anglais) pour que votre application apparaisse soignée et native. Il est livré avec des exemples de code et couvre des sujets tels que l'intégration du dock macOS, le glisser-déposer, les notifications de bureau et l'assistance pour que votre application se lance rapidement.