Skip to content

Repository files navigation

P is for peer-to-peer networking with browsers

P is a small framework used to create browser-to-browser networks (as opposed to just a connection). With P, you can:

  • Connect to other browsers using a simple WebSocket server.
  • Connect to other browsers using your established connections to other browsers. This is what makes P unique: it allows for transitive connections across peers, allowing easy creation of mesh networks.

After a connection is established the middleman is no longer necessary – no proxies are involved.

This is made possible by an unstable and young technology -- WebRTC. Currently, only Chrome and Firefox support this technology.

onramp, a simple WebSocket server, is used as the signaling channel to establish initial connections.

API

// InitializingvarrootNode=P.create();// create the root node// Connection managementvarwebSocketNode=rootNode.connect(address);// connect to an onramp WebSocket servervarwebRtcNode=webSocketNode.connect(address);// connect to a peer using an onramp connectionvarwebRtcNode=webRtcNode.connect(address);// connect to a peer using an existing peer connectionanyNode.close();// close the connectionanyNode.isOpen();// return true if the connection is openvarnodeArray=anyNode.getPeers();// returns an array of all peer connections// Firewalling connectionsvarprotectedNode=P.create({firewall: function(offerData){// Only accept RTC connection offers which send 'secret' as the offer data// this firewall rule will apply to any child nodes as wellreturnofferData==='secret';}});// Send offerData with a connection requestanyNode.connect({address: address,offerData: 'secret'});// Sending and receiving messageswebRtcNode.send(message);// send a message to a peer; can be json, string, or arraybufferwebRtcNode.on('message',function(message){});// listens for messages from a peerwebRtcNode.on('array buffer',function(arrayBuffer){});// listens for array buffers from a peer// EventsanyNode.on('connection',function(peerNode){});// emitted when a connection is made via this peeranyNode.on('open',function(){});// emitted when this connection is open and readyanyNode.on('close',function(){});// emitted when this connection is closedanyNode.on('error',function(err){});// listens for errors for this connectionanyNode.removeListener(eventName,optionalCallback);// stops listening to an event

Documentation

Release Notes

  • 0.3.3 - Fixed an issue in FF which caused disconnections shorting after successful connections due to a GC miscommunication which seems to clean up DataChannels which are still in use (thereby closing them).
  • 0.3.2 - Updated the library to align it with the latest WebRTC standards -- mainly changes in configuration objects.
  • 0.3.1 - Added 'firewall' option to firewall RTC requests.
  • 0.3 - Major refactor of internals and simplification of API, Firefox support, and respectable unit test coverage.
  • 0.2 - Public release

About

Peer-to-peer networking with browsers

Topics

Resources

Stars

407 stars

Watchers

24 watching

Forks

Releases

Packages

Used by

Contributors

Languages