-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.js
More file actions
94 lines (84 loc) · 2.07 KB
/
Copy pathmain.js
File metadata and controls
94 lines (84 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
var _cluster = require('cluster');
var _os = require('os');
var _ = require('underscore');
var path = require('path');
var options = _.extend({
timeout: 120000,
threads: 64
},processArgs());
options.thread = Math.min(options.threads, _os.cpus().length);
var main = path.normalize(__dirname+'/process.js');
var i;
var workers = {};
_cluster.setupMaster({
exec: main
});
for (var i = 0; i < options.thread; i++) {
createWorker();
}
function processArgs() {
var i;
var args = process.argv.slice(2);
var output = {};
for (i=0;i<args.length;i++) {
var l1 = args[i].substr(0,1);
if (l1 == "-") {
if (args[i+1] == "true") {
args[i+1] = true;
}
if (args[i+1] == "false") {
args[i+1] = false;
}
if (!isNaN(args[i+1]*1)) {
args[i+1] = args[i+1]*1;
}
output[args[i].substr(1)] = args[i+1];
i++;
}
}
return output;
};
if (_cluster.isMaster) {
if (options.timeout > 0) {
setInterval(function() {
var time = new Date().getTime();
for (pid in workers) {
if (workers[pid] && workers[pid].lastCheck + 5000 < time) {
console.log("TIMEOUT: ", pid, "Data: ", workers[pid].data);
workers[pid].worker.process.kill();
delete workers[pid];
createWorker();
}
}
}, options.timeout);
}
}
var processTime = {};
function createWorker() {
var worker = _cluster.fork();
console.log("New thread: ",worker.process.pid);
workers[worker.process.pid] = {
worker: worker,
lastCheck: new Date().getTime()-1000 // allow boot time
};
worker.on('error', function(data) {
console.log("> error",data);
});
worker.on('online', function(data) {
//console.log("> online");
});
worker.on('listening', function(data) {
//console.log("> listening",data);
});
worker.on('exit', function(data) {
console.log("> exit",data);
});
worker.on('message', function(data) {
// register the time
var curTime = new Date().getTime();
if (workers[worker.process.pid] && workers[worker.process.pid].lastCheck) {
workers[worker.process.pid].data = data;
workers[worker.process.pid].lastCheck = curTime;
}
});
};