Skip to content

DEPRECATED: TCP-like communication over UDP with integrated STUN/ICE.

License

Notifications You must be signed in to change notification settings

walasek/node-reliable-udp

Repository files navigation

DEPRECATED

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.


Goal

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.

Installation

Node >=8.9.0 is required.

npm install --save reliable-udp

To perform tests use:

cd node_modules/reliable-udp
npm t

Usage

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();
})();

Contributing

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/or Promise where possible.
  • Features must be properly tested.
  • New methods must be properly documented with jscode style comments.

About

DEPRECATED: TCP-like communication over UDP with integrated STUN/ICE.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published