Skip to content

Instantly share code, notes, and snippets.

@ShiningRay
Created December 9, 2018 03:45
Show Gist options
  • Save ShiningRay/3b8aaeea2fcb2c1db2731949f2469e2e to your computer and use it in GitHub Desktop.
Save ShiningRay/3b8aaeea2fcb2c1db2731949f2469e2e to your computer and use it in GitHub Desktop.
nanomsg req/rep load balancer example
var nano = require('nanomsg');
const async = require('async')
function createWorker(index) {
var worker = nano.socket('rep')
const endpoint = 'inproc://worker' + index;
worker.bind(endpoint);
worker.index = index;
worker.on('data', (buf) => {
var a = buf.toString();
var b = parseFloat(a);
console.log(`at ${index} received: ${b}`);
worker.send([index, b, (b * 2)].join('='))
})
return worker;
}
var workers = []
for (var i = 0; i < 5; i++) {
workers.push(createWorker(i));
}
const balancer = nano.socket('req', {
raw: true
});
workers.forEach((w) => {
balancer.connect('inproc://worker' + w.index);
})
const server = nano.socket('rep', {
raw: true
});
server.bind('inproc://server')
nano.device(server, balancer)
// Client side ///////////////
var client = nano.socket('req')
client.connect('inproc://server');
client.on('data', (d) => {
console.log('client received: ', d.toString());
})
async.forever((next) => {
const r = Math.random();
console.log('sending ' + r)
client.send(r);
// we must sleep here, otherwise if we use for loop then we can only get the first response
setTimeout(next, 100);
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment