12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- "use strict";
- var cluster = require('cluster');
- module.exports = reload;
- var KILL_SIGNAL = 'SIGTERM';
- var reloading = false;
- var reloadPedding = false;
- function reload(count) {
- if (reloading) {
- reloadPedding = true;
- return;
- }
- if (!count) {
- count = require('os').cpus().length;
- }
- reloading = true;
-
- var aliveWorkers = [];
- var worker;
- for (var id in cluster.workers) {
- worker = cluster.workers[id];
- if (worker.state === 'disconnected') {
- continue;
- }
- aliveWorkers.push(worker);
- }
- var firstWorker;
- var newWorker;
- function reset() {
-
- newWorker.removeListener('listening', reset);
- newWorker.removeListener('error', reset);
- if (firstWorker) {
-
- firstWorker.kill(KILL_SIGNAL);
- setTimeout(function () {
- firstWorker.process.kill(KILL_SIGNAL);
- }, 100);
- }
- reloading = false;
- if (reloadPedding) {
-
- reloadPedding = false;
- reload(count);
- }
- }
- firstWorker = aliveWorkers[0];
- newWorker = cluster.fork();
- newWorker.on('listening', reset).on('exit', reset);
-
- for (var i = 1; i < aliveWorkers.length; i++) {
- worker = aliveWorkers[i];
-
- worker.kill(KILL_SIGNAL);
- }
-
- var left = count - 1;
- for (var j = 0; j < left; j++) {
- cluster.fork();
- }
- }
|