Synapsis
Inter connect local machines together with a Express like socket router.
Data transfer is cipphered with Diffie Hellman algorithm (dynamic public / private key exchange between peers based on a shared password).
Usage
Instanciate Peer
Instanciate new peer:
var Synapsis = require('synapsis');
var synapse = new Synapsis({
namespace: 'namespace-name',
password: 'long-password-16-random-caracters-recommended',
identity: {
name : require('os').hostname()
}
});
synapse.start();
Expose Socket Routes
Now expose socket routes that can be triggered by other peers:
synapse.router('command:restart', () => {
console.log('Got Restart');
});
synapse.router('command:sync_db', (new_db, reply) => {
fs.writeFile('current_db.json', new_db, (err) => {
if (err)
return reply(err);
reply(null, 'DB Synced');
});
});
Send/Broadcast Actions to Peers
To send actions to other peers:
synapse.broadcast('command:restart');
synapse.broadcast('command:restart', { some : 'data' });
synapse.broadcast('command:sync_db', { my : { db : true } }, function(err, response, socket) {
console.log(`Err= ${err} Response = ${response} from = ${socket.identity.name}`);
});
Or send to a specific peer:
var peer = synapse.getPeers()[0];
synapse.send(peer.id, 'command:restart');
synapse.send(peer.id, 'command:restart', function(err, data, socket) {
console.log(err, data, socket.identity);
});
synapse.send(peer.id, 'command:restart', {mu : { db : true} }, function(err, data, socket) {
console.log(err, data, socket.identity);
});
Event Handling
synapse.on('peer:connected', function(identity, socket) {
console.log('New peer detected', identity);
});
synapse.on('peer:disconnected', function(identity) {
console.error(identity);
});
synapse.on('error', function(err) {
console.error(err);
});
synapse.on('ready', function() {
console.log('Peer Ready');
});
Test
Checkout test/ folder for more examples/
License
MIT