ataraxia
Mesh networking with peer-to-peer messaging for NodeJS. Ataraxia connects
different NodeJS instances together and allows messages to be passed between
these instances. Some instances may act as routers for other instances to
create a mesh network.
For support for services with RPC and events see ataraxia-services.
Installation
npm install ataraxia
Also install one or more transports:
Example with TCP transport
const Network = require('ataraxia');
const TCPTransport = require('ataraxia-tcp');
const net = new Network({ name: 'name-of-your-app-or-network' });
net.addTransport(new TCPTransport());
net.on('node:available', node => {
console.log('A new node is available:', node.id);
node.send('hello');
});
net.on('message', msg => {
console.log('A message was received', msg.type, 'with data', msg.data, 'from', msg.returnPath.id);
});
net.start()
.then(...)
.catch(...);
Example with machine-local transport and TCP transport
This example creates a network where instances on the same machine connect to
each other locally first and then elects one instance to handle connections
to other machines on the same network.
const Network = require('ataraxia');
const LocalTransport = require('ataraxia-local');
const TCPTransport = require('ataraxia-tcp');
const net = new Network({ name: 'name-of-your-app-or-network' });
const local = new LocalTransport();
local.on('leader', () => {
net.addTransport(new TCPTransport());
});
net.addTransport(local);
net.start()
.then(...)
.catch(...);
API
Network
new Network(options)
- create a new network using the given options. Options may be:
name
- Required. The name of the network, should be short and describe the app or library.endpoint
- Request that the local node is an endpoint that should not perform routing.
start()
- start the network and its transportsstop()
- stop the network and its transportsaddTransport(transport)
- add a transport that should be usedon('node:available', node => ...)
- a node has been found and messages can now be sent and received to/from iton('node:unavailable', node => ...)
- a node is no longer availableon('message', ({ returnPath, type, data }) => ...)
- a message has been received from a node
Node
id
- get the id of the nodeavailable
- get if the node is reachableon('unavailable', () => ...)
- node is no longer availablesend(type, data)
- send a message of the given type with the specified data to the nodeon('message', ({ returnPath, type, data }) => ...)
- a message has been received from this node