A layer for communcation between master and worker processes
npm install cluster-hub
var Hub = require('cluster-hub');
var cluster = require('cluster');
var hub = new Hub();
if (cluster.isMaster) {
// in master process
hub.on('sum', function (data, sender, callback) {
callback(null, data.a + data.b);
});
var worker = cluster.fork();
} else {
//in worker process
hub.requestMaster('sum', {a: 1, b:2}, function (err, sum) {
console.log('Sum in worker: ' + sum);
process.exit();
});
}
hub.sendToMaster(message, data); //works from workers and master
hub.sendToWorker(worker, message, data); // works from master
hub.sendToWorkers(message, data);
Examples:
- https://github.com/sirian/node-cluster-hub/blob/master/examples/index.js
- https://github.com/sirian/node-cluster-hub/blob/master/examples/broadcast.js
Same as simple messaging, but you can provide a callback
hub.requestMaster(message, data, callback); //works from workers and master
hub.requestWorker(worker, message, data, callback); // works from master
Example in "Getting Started" section, and here: https://github.com/sirian/node-cluster-hub/blob/master/examples/requests.js
This module provide a way to get global exclusive lock between all processes (master and workers). If worker process dies while holding locked section - lock will be released automatically.
// this method available in master and in workers
hub.lock(lockKey, function(unlock) {
// exclusive lock here
...
// to unlock - call unlock()
})
Example: https://github.com/sirian/node-cluster-hub/blob/master/examples/locks.js
More examples here: https://github.com/sirian/node-cluster-hub/tree/master/examples