Distribute.io allows anyone to donate bandwidth to causes they support by simply opening up a webpage, even on devices with limited memory / storage.

For downloaders, it accelerates downloads by parallelising the download of file segments, spread among multiple mirrors and peer-to-peer (P2P) transfers. Additionally, it conveniently ensures the authenticity and integrity of files via hash sums of both individual segments and the full files, an important security measure which is often neglected as it requires external software and additional steps.

All this is done purely in the browser, using WebRTC data channels and XHR2. As far as we know, this is the first implementation of a HTML5 segmented download manager, all the more so from two heterogeneous sources - HTTP and P2P.

Distribute.io is optimised for its use case, as opposed to typical P2P systems like BitTorrent, which are not interopable with browser technologies. It is more accessible for not-so-technical audiences who would not otherwise participate via P2P, and enables smaller contributions - you can set the amount of storage and bandwidth you wish to donate, and our server would send your device just the say, 16MB you specified worth of file segments. (In most P2P systems, you can only choose what you want to share at a file level, e.g. you can either share a 650MB ISO or not.)

Since WebRTC has to be server-mediated anyway, we could take advantage of that to optimize delivery similar to Edge-servers in a Content Delivery Network (CDN), allocating segments of files to bandwidth donors based on where they are most geographically and temporally needed, which cannot be achieved by a relatively uncoordinated regular P2P “swarm”.

In comparison, the management of files shared via BitTorrent often requires user intervention - if you wanted to share files most likely needed by the community, you would likely need to keep your set of files updated manually.

Distribute.io is designed to be easy to integrate into existing systems - just by including a JavaScript snippet, with a CSS selector describing which download links you want to enable its functionality with.

The technologies we used to build it include Node.js, Redis, PhantomJS, WebRTC with PeerJS, Web Workers and rusha - a JavaScript SHA1 implementation reaching as fast as half native speed.

Built With

Share this project: