cluster-rpc.js/process/master.js

48 行
1.3 KiB
JavaScript

'use strict';
module.exports.create = function (prefixes) {
if (prefixes.debug) { console.log('[cluster-rpc] master created'); }
var m = new (require('events').EventEmitter)();
m.addWorker = function (worker) {
if (prefixes.debug) { console.log('[cluster-rpc] [master] adding worker'); }
m._workers = [];
var w = new (require('events').EventEmitter)();
function emitConnection() {
if (w.__online) {
return;
}
w.__online = true;
m.emit('connection', w);
}
worker.on('online', function () {
if (prefixes.debug) { console.log('[cluster-rpc] [master] worker came online, at fork'); }
emitConnection();
});
worker.on('message', function (data) {
if (prefixes.connect === data.type) {
if (prefixes.debug) { console.log('[cluster-rpc] [master] worker connected, manually'); }
emitConnection();
return;
}
if (prefixes.debug) { console.log('[cluster-rpc] [master] worker sent message', data); }
w.emit('message', data);
});
w.send = function (data) {
if (prefixes.debug) { console.log('[cluster-rpc] [master] sending', data); }
worker.send(data);
};
// TODO remove workers that exit
m._workers.push(w);
};
return m;
};