This library is deprecated in favor of node-udp-messaging which has defined more manageable goals.
Current state of this library does not allow stable transfers of big amounts of data.
A reliable communication protocol over UDP with hole punching for Node.js.
Implementing NAT hole punching with TCP is very tricky and does not work on every configuration. This project aims to deliver a tool to establish a reliable communication stream (TCP-like) over UDP for use in P2P systems. Communication stability has the priority over speed in this project.
Node >=8.9.0
is required.
npm install --save reliable-udp
To perform tests use:
cd node_modules/reliable-udp
npm t
Beware this project is still in development. There may be serious bugs or performance issues over time.
(async () => {
// Create a reliable UDP socket
const ReliableUDPSocket = require('reliable-udp');
const server = new ReliableUDPSocket({ port: 12345 });
await server.bind();
// Connect to another peer
const peer = await server.connect('127.0.0.1', 12345);
// Send some raw data as a stream
const data = Buffer.from("SomeGenericDataHere");
peer.sendBuffer(data);
// Receive raw data as a stream
peer.on('data', (data) => {
console.log(`Received: ${data}`);
});
// Execute hole punching (get an address and port that another peer over the internet can use to reach this peer)
const hole = await server.discoverSelf();
// Close a particular session
peer.close();
// Close all current sessions and unbind
server.close();
})();
The source is documented with JSDoc. To generate the documentation use:
npm run docs
Extra debugging information is printed using the debug
module:
DEBUG=reliable-udp:* npm t
The documentation will be put in the new docs
directory.
To introduce an improvement please fork this project, commit changes in a new branch to your fork and add a pull request on this repository pointing at your fork. Please follow these style recommendations when working on the code:
- Use tabs (yup).
- Use
async
/await
and/orPromise
where possible. - Features must be properly tested.
- New methods must be properly documented with
jscode
style comments.