Skip to content

Latest commit

 

History

History
76 lines (52 loc) · 2.63 KB

README.md

File metadata and controls

76 lines (52 loc) · 2.63 KB

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