2011-01-23 2 views
44

Il n'y a pas beaucoup plus à ajouter. Est-il possible de construire un client torrent en utilisant uniquement du HTML et JavaScript. Vous ne pouvez pas utiliser des choses comme Java, ActiveX, NaCl ... Si oui, donnez une description de haut niveau. Je n'ai pas beaucoup de connaissances sur le front end dev, mais je pense que les websockets seront capables de faire du networking (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 des fichiers en utilisant JavaScript, donc je pense que le fichier téléchargé devra être sauvegardé complètement dans la mémoire, ou le client devra utiliser l'une des nouvelles API en HTML5 pour stocker du contenu.Est-il possible de construire un client torrent en utilisant seulement HTML (5) et JavaScript?

+0

Je suppose que la question est plus vers: Y at-il un noeud "navigateur"? http://browserver.org/ –

+1

github.com/popcorn-official/popcorn-app: Référentiel indisponible en raison du retrait DMCA. –

Répondre

32

Non, ce n'est pas le cas.

En effet, la spécification WebSocket se situe en dehors de HTML5 et JavaScript ;-) Cela dit, l'ouverture de la question « en utilisant les fonctionnalités supportées nativement dans les navigateurs [progressifs /] à venir », puis ...

... toujours non :-)

Ceci est dû au fait que WebSocket nécessite une prise de contact spéciale pour la configuration avec restrictions. Ce n'est pas un open-TCP-fest gratuit pour tous. L'approche nécessiterait soit

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

  2. ou, de façon plus réaliste, un serveur de rebondir à travers

+0

1. Serai-je capable de faire cette modification ou devra-t-elle être faite par les développeurs des navigateurs? 2. Toutes les informations passeront-elles par le serveur (comme dans chaque bit de chaque fichier indexé par le tracker) ou seulement par la poignée de main? Merci! – quilby

+0

@quilby 1. La modification doit être * par client acceptant les requêtes WebSocket * (lire: * autres clients torrent * - des restrictions "inter-domaines" sont imposées, comme avec XHR etc., ce qui rendrait toujours cette approche inutilisable) 2) Toutes les informations, éventuellement cryptées via TLS de * client vers serveur * (mais pas du serveur vers d'autres clients). De plus, WebSocket n'établit pas de mécanisme pour accepter les demandes entrantes (bien que le serveur en jeu puisse faire beaucoup de choses intéressantes). Certains clients torrent rechignent à ne pas pouvoir faire de back-connections et refusent même de jouer. –

+0

@quilby Certains clients torrent prennent en charge diverses méthodes de cryptage (sur l'en-tête ou le flux entier). Cela ne devrait pas être considéré comme fournissant une sorte de vraie vie privée et serait juste un autre problème à traiter. –

8

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

3
+3

comment est-il possible que ces lib existe l'événement bien que les réponses ci-dessus indiquent qu'il est impossible de le construire? Edit: je suppose que c'est parce qu'ils dépendent de node.js et qu'ils ne peuvent pas exécuter côté client dans le navigateur (nativly) ... –

+0

C'est parce que ce sont des clients torrent de navigateur web, ce sont des scripts node (côté serveur Javascript). – adalal

3

Je suis en retard à la fête, mais comme cette question est toujours parmi les meilleurs résultats de Google, je répondrai quand même.

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

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

9

Il n'y a pas de bonne raison que cela ne puisse être fait aujourd'hui. BitTorrent/uTorrent ont tous les deux un code pour prendre en charge les connexions websocket avec des trames binaires. Cependant, ils sont actuellement compilés sans soutien (pour des raisons politiques/de produits je pense). Je travaillais 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 des iPads à partir de Safari mobile. (enregistrer directement sur Google Drive de manière assez amusante)

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

Le protocole d'annonce de suivi peut également utiliser un bit dans le champ "clé" pour indiquer que le client accepte les connexions de socket Web. Alors un argument spécial comme "typewant" pourrait indiquer que la réponse d'annonce devrait renvoyer seulement les clients qui ont envoyé ce bit.

Le protocole de suivi pourrait également être étendu de manière similaire à la négociation de la prise en charge des connexions WebRTC P2P DataChannel, de sorte que les connexions puissent être effectuées directement par navigateur < -> navigateur.

Pour l'instant, nous avons l'API de la plate-forme de chrome.socket et jstorrent, une application Chrome emballé (conçu pour ChromeOS principalement)

Questions connexes