P
Peer-to-peer networking with browsers
Install / Use
/learn @unsetbit/PREADME
<a href="http://unsetbit.com/p">P</a> 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
// Initializing
var rootNode = P.create(); // create the root node
// Connection management
var webSocketNode = rootNode.connect(address); // connect to an onramp WebSocket server
var webRtcNode = webSocketNode.connect(address); // connect to a peer using an onramp connection
var webRtcNode = webRtcNode.connect(address); // connect to a peer using an existing peer connection
anyNode.close(); // close the connection
anyNode.isOpen(); // return true if the connection is open
var nodeArray = anyNode.getPeers(); // returns an array of all peer connections
// Firewalling connections
var protectedNode = 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 well
return offerData === 'secret';
}
});
// Send offerData with a connection request
anyNode.connect({address: address, offerData: 'secret'});
// Sending and receiving messages
webRtcNode.send(message); // send a message to a peer; can be json, string, or arraybuffer
webRtcNode.on('message', function(message){}); // listens for messages from a peer
webRtcNode.on('array buffer', function(arrayBuffer){}); // listens for array buffers from a peer
// Events
anyNode.on('connection', function(peerNode){}); // emitted when a connection is made via this peer
anyNode.on('open', function(){}); // emitted when this connection is open and ready
anyNode.on('close', function(){}); // emitted when this connection is closed
anyNode.on('error', function(err){}); // listens for errors for this connection
anyNode.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
Related Skills
node-connect
345.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
104.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
345.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
345.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
