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.
// 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- 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