startNewNode(nodeID) { this.logger.info(`Starting ${nodeID} node...`); const worker = cluster.fork(); worker.nodeID = nodeID; worker.on("message", msg => this.workerMessageHandler(worker, msg)); worker.on("disconnect", () => { const idx = this.nodes.findIndex(node => node.worker == worker); if (idx != -1) { const node = this.nodes[idx]; this.nodes.splice(idx, 1); this.logger.info(`Node ${node.nodeID} stopped.`); this.removeNodeIDFromMetric(node.nodeID); } }); worker.send({ cmd: "start", nodeID }); this.nodes.push({ nodeID, worker }); }
cluster.on('online', function (worker) { worker.send(token) })
_sendBlocksToWorkers(blocks) { const workers = cluster.workers; Object.keys(workers).forEach((key) => { const worker = workers[key]; if (worker) { try { worker.send({ type: 'ratelimiter_blocks', value: blocks }); } catch (e) { // Ignore the error } } }); }
/** * @param {*} message * @returns {Promise} * @private */ async _sendMessage(message) { debug('_sendMessage: %o', message); return new Promise((resolve, reject) => { this._worker.send(message, null, err => { if (err) { return reject(err); } return resolve(); }); }); }
cluster.on('message', (worker, message) => { switch (message) { case 'reload': strapi.log.info('The server is restarting\n'); _.forEach(cluster.workers, worker => worker.send('isKilled')); break; case 'kill': _.forEach(cluster.workers, worker => worker.kill()); cluster.fork(); break; case 'stop': _.forEach(cluster.workers, worker => worker.kill()); process.exit(0); break; default: return; } });
return t => { const worker = cluster.fork() worker.send(config) worker.on('message', data => { worker.disconnect()
}); worker.worker_id = workerId; worker.send({ type: 'config', body: yaml.dump(config)