web-dev-qa-db-fra.com

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 sur le développement frontal, mais je pense que les websockets pourront faire le réseautage (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 sauvegardé complètement dans la mémoire, soit le client devra utiliser l'une des nouvelles API en HTML5 pour stocker le contenu.

46
quilby

Il existe une implémentation récente basée sur WebRTC qui fonctionne dans le nœud et le navigateur: https://github.com/feross/webtorrent

15
Laurent VB

Non. Ce n'est pas le cas.

En effet, la spécification WebSocket ne relève pas de HTML5 et JavaScript ;-) Cela étant dit, ce qui ouvre la question à "l'utilisation de fonctionnalités prises en charge nativement dans les navigateurs [progressifs/à venir]", puis ...

... toujours pas :-)

Cela est dû au fait que WebSocket nécessite une négociation spéciale pour configurer avec des restrictions. Ce n'est pas un festival TCP ouvert et gratuit. L'approche nécessiterait soit

  1. les clients à modifier pour accepter les demandes WebSocket (ainsi que pour traiter les problèmes d'accès intersites)

  2. ou, plus réaliste, un serveur à travers lequel rebondir

32
user166390

Cela est possible en utilisant API Chrome Apps : chrome.socket et chrome.fileSystem .

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

16
Yahor

Il n'y a aucune bonne raison pour laquelle cela ne peut pas être fait aujourd'hui. BitTorrent/uTorrent ont tous deux du code pour prendre en charge les connexions Websocket avec des trames binaires. Cependant, ils sont actuellement compilés sans support (pour des raisons politiques/produit je pense). J'avais l'habitude de travailler chez BitTorrent et un autre ingénieur ( Arty ) a écrit le support. Pendant un moment, c'était vraiment cool de pouvoir télécharger des torrents sur iPad à partir de Safari mobile. (enregistrer directement sur Google Drive de manière amusante)

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

Le protocole d'annonce du tracker pourrait également utiliser un peu dans le champ "clé" pour indiquer que le client accepte les connexions Websocket. Un argument spécial comme "typewant" pourrait alors indiquer que la réponse d'annonce ne devrait renvoyer que les clients qui ont envoyé ce bit.

Le protocole de suivi pourrait également être étendu de manière similaire pour prendre en charge la négociation des connexions WebRTC P2P DataChannel, afin que les connexions puissent être établies directement par le navigateur <-> navigateur.

Pour l'instant, nous avons l'API de la plateforme chrome.socket, et jstorrent , une chrome (conçue pour ChromeOS principalement))

9
kzahel

Vous ne pouvez pas avec WebSockets car ce sont strictement client-serveur. Mais la prochaine norme WebRTC, tout en étant principalement destinée à la conférence audio/vidéo, a un provision pour les transferts de données client-client génériques. Si cette disposition arrive à la version finale, vous aurez alors un moyen viable de mettre en œuvre des transferts de données génériques entre les navigateurs.

8
CAFxX

Je suis en retard à la fête, mais comme cette question figure toujours en tête des résultats de Google, je répondrai quand même.

Vous pouvez écrire des applications Web ou des extensions de navigateur liées à BitTorrent avec Btapp.js , qui utilise une interface Javascript fournie par BitTorrent Torque . Lorsque vous appelez la méthode de connexion, l'utilisateur sera invité à installer BitTorrent Torque, c'est tout. Quelques trucs sympas qui se passent si vous consultez des projets existants en l'utilisant: streaming multimédia, partage par glisser-déposer, etc.

Quant aux solutions sans aucune dépendance, celles mentionnées par Nick Russler semblent toujours être les seules options envisageables.

3
L. Daniel Nordstrom
3
jkeogh