Apps con BitTorrent



Presentado por Luis Porras / @lporras16

Software Engineer at Speakup




¿Conocen BitTorrent?



  • Protocolo para Intercambio de archivos peer-to-peer
  • Comunmente usado para transferir archivos grandes
  • Favorito de piratas

Creado por



Muerte de Un Grande


RENACE LA LEYENDA


Mega Search


Aclaraciones Importantes



Por favor NO APOYEN LA PIRATERIA


Esta charla no es para aprender a piratear


Yo no soy un pirata

Cómo funciona BitTorrent?

La forma tradicional de descargar Archivos


1 servidor, muchos clientes

image/svg+xml

Peer to Peer Network


image/svg+xml

Estructura de una Red BitTorrent


  • Peers: (puntos) Todos los usuarios de la Red
  • Leechers: (Sanguijuelas) Usuarios que descargan archivos y no contienen el archivo completo
  • Seeders: (Semillas) Usuarios que contienen el archivo completo
  • Trackers: (Rastreadores) Servidor especial que tiene información necesaría para que los peers se conecten unos a otros

The Swarm (Enjambre)



Los Usuarios que los trackers se encargan de buscar.


Analogía

Tracker, panal de abejas.

Enjambre, los usuarios.

La miel, el contenido del torrent

Visualización

Limitaciones



Leeching


Normalmente los usuarios se desconectan rápidamente una vez obtenido la copia completa de su archivo.

Clientes Torrents



Decentralización


HTTP Torrents
Encontrar URIs Motores de Búsquedas, amigos Motores de Búsquedas, amigos
Transferencia de Archivos Un Servidor HTTP Muchos BitTorrent Peers
Encontrar Peers DNS (Domain Name System) Tracker Server

Decentralización


HTTP Magnet Links
Encontrar URIs Motores de Búsquedas, amigos Motores de Búsquedas, amigos
Transferencia de Archivos Un Servidor HTTP Muchos BitTorrent Peers
Encontrar Peers DNS (Domain Name System) DHT (Distributed Hash Table)

Mejoras al Protocolo



DHT (Distributed Hash Table)


Cada Nodo conserva info de los nodos vecinos

Evitando un cuello de botella en la caida de un Tracker


Los clientes Torrent tienen la funcionalidad de desactivar el DHT con "Private Flag"

Magnet URI



magnet:?xt=urn:btih:ef330b39f4801d25b4245212e75a38634bfc856e

Mejoras al Protocolo



Web Seeding


Busca combinar la potencia de la descarga directa del servidor con la del P2P.


Hay como mínimo una semilla completa de la que descargar siempre


WebSeed - HTTP/FTP Seeding (GetRight style)

Mejoras al Protocolo



Index of BitTorrent Enhancement Proposals

Sitios Relacionados a Torrent

Búscadores


Does BitTorrent = Piracy? NO


Twitter - Murder Project


Twitter: Murder BitTorrent Deploy System

Torrent Freak


PUT IO


Será posible ver un video mientras se descarga con BitTorrent?


BTAPPS LAB



BTAPP.js


Torque


//Se conecta a Torque (por Defecto)
var btapp = new Btapp;
btapp.connect();
            

O...


//Usando la sintáxis de plugin
var btapp = new Btapp;
btapp.connect({
product: 'Torque'
plugin: true
});
            

Conectarse a Clientes Torrents

uTorrent


var btapp = new Btapp;
btapp.connect({
  product: 'uTorrent',
  plugin: false,
  pairing_type: 'native'
});
            

BitTorrent


var btapp = new Btapp;
btapp.connect({
  product: 'BitTorrent',
  plugin: false,
  pairing_type: 'native'
});
          

Añadiendo un Torrent




var magnet = 'magnet:?xt=urn:btih:f0d665f264393a7dafd7d05d739e1097df652e80&dn=The.Yes.Men.Fix.The.World';

var callback = function() {
  alert('añadido el torrent');
};

btapp.get('add').torrent({
  url: magnet,
  callback: callback
});
          

Archivos Torrents




var files = btapp.get('torrent').get('D9C70109CB05C181F9EC9373BE876A0D40C4D7B0').get('file');

> files.pluck('id');

 ["JSCONF.mp4", "Want.to.see.what.happens.next.url", "vodo.nfo"]
          

Cómo construyo una chrome Extension?


Chrome Extensions



Let's do this!



BTAPP.js

+ Chrome Extensions

+ Backbone.js + Handlebars + SPA

+ Bootstrap

+ Video.js

+ CORS + JSONP, trasnochos, etc

Torrent Chrome Extension


Lo logré



PopCorn Time


TorrentTV


Torrent Stream



Streaming Torrent Engine

Te permite acceder a los archivos dentro de torrents como node streams

Hecho por @mafintosh

Torrent Stream


Uso Básico


var torrentStream = require('torrent-stream');

var engine = torrentStream('magnet:link');

engine.on('ready', function() {
    engine.files.forEach(function(file) {
        console.log('filename:', file.name);
        var stream = file.createReadStream();
        // stream is readable stream to containing the file content
    });
});
            
GITHUB

Peerflix


Streaming torrent client for Node.js

Usa a torrent stream

Te permite reproducir un video en VLC Player


              npm install -g peerflix

              // Desde la terminal

              peerflix "magnet:?xt=urn:btih:ef330b39f4801d25b4245212e75a38634bfc856e" --vlc
            
GITHUB

Demostración

BTAPP Demo



Programando en Vivo: Aplicación DHT usando btapp.js por Patrick Williams en Vimeo.

Streaming BitTorrent



WebTorrent



Feross Aboukhadijeh: WebTorrent - JSConf.Asia 2014

GITHUB

Canales IRC




#stackvm, #webtorrent, e #ips en freenode

PODCAST


iTunes Stitcher Youtube

Gracias

Preguntas?