summaryrefslogtreecommitdiff
path: root/benchmark/http/upgrade.js
diff options
context:
space:
mode:
Diffstat (limited to 'benchmark/http/upgrade.js')
-rw-r--r--benchmark/http/upgrade.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/benchmark/http/upgrade.js b/benchmark/http/upgrade.js
new file mode 100644
index 0000000000..0feaecc8ff
--- /dev/null
+++ b/benchmark/http/upgrade.js
@@ -0,0 +1,53 @@
+'use strict';
+
+const common = require('../common.js');
+const PORT = common.PORT;
+const net = require('net');
+
+const bench = common.createBenchmark(main, {
+ n: [5, 1000]
+});
+
+const reqData = 'GET / HTTP/1.1\r\n' +
+ 'Upgrade: WebSocket\r\n' +
+ 'Connection: Upgrade\r\n' +
+ '\r\n' +
+ 'WjN}|M(6';
+
+const resData = 'HTTP/1.1 101 Web Socket Protocol Handshake\r\n' +
+ 'Upgrade: WebSocket\r\n' +
+ 'Connection: Upgrade\r\n' +
+ '\r\n\r\n';
+
+function main({ n }) {
+ process.env.PORT = PORT;
+ var server = require('../fixtures/simple-http-server.js')
+ .listen(common.PORT)
+ .on('listening', function() {
+ bench.start();
+ doBench(server.address(), n, function() {
+ bench.end(n);
+ server.close();
+ });
+ })
+ .on('upgrade', function(req, socket, upgradeHead) {
+ socket.resume();
+ socket.write(resData);
+ socket.end();
+ });
+}
+
+function doBench(address, count, done) {
+ if (count === 0) {
+ done();
+ return;
+ }
+
+ const conn = net.createConnection(address.port);
+ conn.write(reqData);
+ conn.resume();
+
+ conn.on('end', function() {
+ doBench(address, count - 1, done);
+ });
+}