forked from tjanczuk/edge
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbenchmarks-node.js
88 lines (76 loc) · 2.61 KB
/
benchmarks-node.js
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
var edge = require('edge');
var http = require('http');
var edgeInvoke = edge.func('bin/Release/Echo.dll');
var nodeInvoke = function(input, cb) {
cb(null, input);
};
function readBody(req, res, cb) {
if (req.method == 'POST') {
var body = '';
req.on('data', function (data) {
body += data;
});
req.on('end', function () {
cb(body);
});
} else {
cb(null);
}
}
var handlers = {
'node': sendTo(nodeInvoke),
'edge': sendTo(edgeInvoke),
'404': function(req, res) {
res.writeHeader(404, { "Content-Type": "text/plain" });
res.write("no handler for " + req.url);
res.end();
}
};
var counter = 0;
var errors = 0;
var last = null;
var lastError = null;
function sendTo(invoke) {
return function (req, res) {
try {
readBody(req, res, function (body) {
var asJson = req.url.indexOf("json") >= 0;
var verbose = req.url.indexOf("verbose") >= 0;
var data = asJson ? JSON.parse(body) : body;
invoke(data, function (err, result) {
var safeResult = (result || ""),
safeData = (data || "");
var status = safeResult.length == safeData.length ? 200 : 500;
res.writeHeader(status, { "Content-Type": "text/plain" });
if (verbose) {
var current = "#" + (counter++) +
"\ntype: " + (asJson ? "json" : "txt") +
"\nlength: " + safeResult.length +
"\nstartsWith: " + safeResult.substring(0, 20) + "...";
res.write(current);
res.write("total errors: " + errors + ", lastError: " + lastError + "\n");
res.write("\n\n#LAST\n" + last);
}
last = current;
lastError = null;
res.end();
});
});
} catch (e) {
errors++;
res.writeHeader(500, { "Content-Type": "text/plain" });
res.write("\ntotal: " + errors);
res.write("\nerror: " + e);
res.write("\nlastError: " + lastError);
res.end();
lastError = e;
}
};
}
http.createServer(function (req, res) {
var parts = req.url.substring(1).split('/');
var name = parts[0];
var handler = handlers[name] || handlers['404'];
handler(req, res);
})
.listen(3000);