46 votes

Est-il possible de construire un client torrent en utilisant uniquement HTML(5) et JavaScript?

Il n'y a pas grand-chose à ajouter. Est-il possible de construire un client torrent en utilisant uniquement HTML et JavaScript? Vous ne pouvez pas utiliser des choses comme Java, ActiveX, NaCl... Si oui, veuillez donner une description de haut niveau.

Je n'ai pas beaucoup de connaissances en développement front-end, mais je pense que les websockets seront capables de gérer le réseau (est-il possible de connecter un client à un autre sans que toutes les données passent par un serveur?). Je sais que vous ne pouvez pas écrire de fichiers en utilisant JavaScript donc je pense que le fichier en cours de téléchargement devra soit être enregistré entièrement en mémoire, soit le client devra utiliser l'une des nouvelles APIs en HTML5 pour stocker du contenu.

33voto

Non. Ce n'est pas.

Cela est dû au fait que la spécification WebSocket se situe en dehors de HTML5 et JavaScript ;-) Cela étant dit, en ouvrant la question à "l'utilisation de fonctionnalités prises en charge nativement dans les navigateurs [progressifs/à venir]" alors...

...toujours non :-)

Cela est dû au fait que WebSocket nécessite une poignée de main spéciale pour se mettre en place avec des restrictions. Ce n'est pas une fête ouverte pour tous les TCP. L'approche nécessiterait soit

  1. que les clients soient modifiés pour accepter les demandes WebSocket (ainsi que pour gérer tout problème d'accès entre sites)

  2. ou, de manière plus réaliste, un serveur pour rebondir à travers

17voto

Laurent VB Points 353

Il y a une récente implémentation basée sur WebRTC qui fonctionne dans node et le navigateur : https://github.com/feross/webtorrent

16voto

Yahor Points 330

Cela est possible en utilisant les API des applications Chrome : chrome.socket et chrome.fileSystem.

Il existe au moins une implémentation en pur JavaScript pour Google Chrome : JSTorrent.

9voto

kzahel Points 856

Il n'y a aucune raison valable pour que cela ne puisse pas être fait aujourd'hui. BitTorrent/uTorrent ont tous les deux du code pour prendre en charge les connexions websocket avec des trames binaires. Cependant, ils sont actuellement compilés sans support (en raison de raisons politiques/produit je pense). J'ai travaillé chez BitTorrent et un autre ingénieur (Arty) a écrit le support. Pendant un certain temps, c'était vraiment génial de pouvoir télécharger des torrents sur des iPads depuis Safari mobile. (sauvegarde directement sur Google Drive curieusement)

Les trackers HTTP pourraient être configurés pour envoyer des en-têtes Access-Control-Allow-Origin.

Aussi, le protocole d'annonce du tracker pourrait utiliser un bit dans le champ "key" pour indiquer que le client accepte les connexions websocket. Ensuite, un argument spécial comme "typewant" pourrait indiquer que la réponse de l'annonce ne devrait renvoyer que les clients ayant envoyé ce bit.

Le protocole du tracker pourrait également être étendu de manière similaire pour prendre en charge la négociation des connexions WebRTC P2P DataChannel, de sorte que les connexions pourraient être établies directement navigateur<->navigateur.

Pour le moment, nous avons l'API de plate-forme chrome.socket, et jstorrent, une application empaquetée pour Chrome (conçue principalement pour ChromeOS)

8voto

CAFxX Points 3911

Vous ne pouvez pas le faire avec WebSockets car ils sont strictement client-serveur. Mais la future norme WebRTC, bien qu'étant principalement destinée à la conférence audio/vidéo, prévoit une disposition pour les transferts de données génériques entre clients. Si cette disposition parvient à la version finale, vous aurez alors un moyen viable de mettre en œuvre des transferts de données génériques peer-to-peer entre les navigateurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X