• Stars
    star
    113
  • Rank 310,035 (Top 7 %)
  • Language
    JavaScript
  • Created almost 11 years ago
  • Updated over 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An API that seamlessly empowers your xhr request through an on-the-fly peer-to-peer network created from your site's visitors

P2PXHR

P2PXHR is a framework that seamlessly power-ups your xhr (AJAX) requests through an on-the-fly peer-to-peer network created from your site's visitors.
It seamlessly chooses between your servers and other peers to get the response.
It is intended to make your content delivery better by making your content deliver when your servers are loaded.
Built on top of [WebRTC][1] DataChannels.

How

The client side gets a URL indicating the resource that needs to be fetch. It then connects to a nodejs service (coordinator) that awares of all users that have/need this resource. The coordinator creates a mesh network by connecting peers that most likely can help each other. The client in the meantime fetches HTTP chunks using HTTP range requests for some blocks. Once connected to other peers the client requests needed blocks from them.

Illustration: The client can be connected to 3 peers at the same time, requesting blocks #12, #15, #54 from peer1, #123 from peer2, #58, #59 from peer3 and at the same time serving blocks #2, #3, #4. At the same time this client requests blocks #6-#9 from the HTTP server.

Demos

File download demo - live

Simple img demo - live

Lazy load img demo - live

HLS stream - live

The image request sends an xhr request for receiving an image from the network. The file downloader sends an xhr request for receiving a larger file. It indicates the amount of data transferred from peers and regular HTTP. In case no additional peers are downloading the file at the moment, open another tab in incognito mode to see the peer-to-peer magic in action.

Getting started

Basic example of creating a new assisted xhr request using p2pxhr:

var request = new peer5.Request();
request.open('GET', 'http://path/to/a/big/file.json');
request.onload = function(e) {
  console.log(this.response);
  ...
};
request.send();

This means you can simply search and replace XMLHttpRequest with peer5.Request() in your code, and you are all set with peer-assisted requests.

Uploading a.k.a seeding

TBD

Supported Browsers

Desktop

  • Chrome 26+
  • Firefox 23+
  • Opera 18

Android:

  • Chrome 29+
  • Firefox 24+
  • Opera 12

Derived from the [WebRTC][1] supported browsers [1]: http://en.wikipedia.org/wiki/WebRTC