aboutsummaryrefslogtreecommitdiffstats
path: root/signaling-server/node_modules/socket.io/node_modules/redis/benches
diff options
context:
space:
mode:
Diffstat (limited to 'signaling-server/node_modules/socket.io/node_modules/redis/benches')
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/redis/benches/buffer_bench.js89
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/redis/benches/hiredis_parser.js38
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/redis/benches/re_sub_test.js14
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/redis/benches/reconnect_test.js29
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/codec.js16
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/pub.js38
-rwxr-xr-xsignaling-server/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/run10
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/server.js23
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/pub.js49
-rwxr-xr-xsignaling-server/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/run6
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/server.js30
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/0013
-rwxr-xr-xsignaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/plot13
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/size-rate.pngbin0 -> 6672 bytes
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/speed.js84
-rw-r--r--signaling-server/node_modules/socket.io/node_modules/redis/benches/sub_quit_test.js18
16 files changed, 470 insertions, 0 deletions
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/buffer_bench.js b/signaling-server/node_modules/socket.io/node_modules/redis/benches/buffer_bench.js
new file mode 100644
index 0000000..a504fbc
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/buffer_bench.js
@@ -0,0 +1,89 @@
+var source = new Buffer(100),
+ dest = new Buffer(100), i, j, k, tmp, count = 1000000, bytes = 100;
+
+for (i = 99 ; i >= 0 ; i--) {
+ source[i] = 120;
+}
+
+var str = "This is a nice String.",
+ buf = new Buffer("This is a lovely Buffer.");
+
+var start = new Date();
+for (i = count * 100; i > 0 ; i--) {
+ if (Buffer.isBuffer(str)) {}
+}
+var end = new Date();
+console.log("Buffer.isBuffer(str) " + (end - start) + " ms");
+
+var start = new Date();
+for (i = count * 100; i > 0 ; i--) {
+ if (Buffer.isBuffer(buf)) {}
+}
+var end = new Date();
+console.log("Buffer.isBuffer(buf) " + (end - start) + " ms");
+
+var start = new Date();
+for (i = count * 100; i > 0 ; i--) {
+ if (str instanceof Buffer) {}
+}
+var end = new Date();
+console.log("str instanceof Buffer " + (end - start) + " ms");
+
+var start = new Date();
+for (i = count * 100; i > 0 ; i--) {
+ if (buf instanceof Buffer) {}
+}
+var end = new Date();
+console.log("buf instanceof Buffer " + (end - start) + " ms");
+
+for (i = bytes ; i > 0 ; i --) {
+ var start = new Date();
+ for (j = count ; j > 0; j--) {
+ tmp = source.toString("ascii", 0, bytes);
+ }
+ var end = new Date();
+ console.log("toString() " + i + " bytes " + (end - start) + " ms");
+}
+
+for (i = bytes ; i > 0 ; i --) {
+ var start = new Date();
+ for (j = count ; j > 0; j--) {
+ tmp = "";
+ for (k = 0; k <= i ; k++) {
+ tmp += String.fromCharCode(source[k]);
+ }
+ }
+ var end = new Date();
+ console.log("manual string " + i + " bytes " + (end - start) + " ms");
+}
+
+for (i = bytes ; i > 0 ; i--) {
+ var start = new Date();
+ for (j = count ; j > 0 ; j--) {
+ for (k = i ; k > 0 ; k--) {
+ dest[k] = source[k];
+ }
+ }
+ var end = new Date();
+ console.log("Manual copy " + i + " bytes " + (end - start) + " ms");
+}
+
+for (i = bytes ; i > 0 ; i--) {
+ var start = new Date();
+ for (j = count ; j > 0 ; j--) {
+ for (k = i ; k > 0 ; k--) {
+ dest[k] = 120;
+ }
+ }
+ var end = new Date();
+ console.log("Direct assignment " + i + " bytes " + (end - start) + " ms");
+}
+
+for (i = bytes ; i > 0 ; i--) {
+ var start = new Date();
+ for (j = count ; j > 0 ; j--) {
+ source.copy(dest, 0, 0, i);
+ }
+ var end = new Date();
+ console.log("Buffer.copy() " + i + " bytes " + (end - start) + " ms");
+}
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/hiredis_parser.js b/signaling-server/node_modules/socket.io/node_modules/redis/benches/hiredis_parser.js
new file mode 100644
index 0000000..f1515b1
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/hiredis_parser.js
@@ -0,0 +1,38 @@
+var Parser = require('../lib/parser/hiredis').Parser;
+var assert = require('assert');
+
+/*
+This test makes sure that exceptions thrown inside of "reply" event handlers
+are not trapped and mistakenly emitted as parse errors.
+*/
+(function testExecuteDoesNotCatchReplyCallbackExceptions() {
+ var parser = new Parser();
+ var replies = [{}];
+
+ parser.reader = {
+ feed: function() {},
+ get: function() {
+ return replies.shift();
+ }
+ };
+
+ var emittedError = false;
+ var caughtException = false;
+
+ parser
+ .on('error', function() {
+ emittedError = true;
+ })
+ .on('reply', function() {
+ throw new Error('bad');
+ });
+
+ try {
+ parser.execute();
+ } catch (err) {
+ caughtException = true;
+ }
+
+ assert.equal(caughtException, true);
+ assert.equal(emittedError, false);
+})();
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/re_sub_test.js b/signaling-server/node_modules/socket.io/node_modules/redis/benches/re_sub_test.js
new file mode 100644
index 0000000..64b8f31
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/re_sub_test.js
@@ -0,0 +1,14 @@
+var client = require('../index').createClient()
+ , client2 = require('../index').createClient()
+ , assert = require('assert');
+
+client.once('subscribe', function (channel, count) {
+ client.unsubscribe('x');
+ client.subscribe('x', function () {
+ client.quit();
+ client2.quit();
+ });
+ client2.publish('x', 'hi');
+});
+
+client.subscribe('x');
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/reconnect_test.js b/signaling-server/node_modules/socket.io/node_modules/redis/benches/reconnect_test.js
new file mode 100644
index 0000000..7abdd51
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/reconnect_test.js
@@ -0,0 +1,29 @@
+var redis = require("../index").createClient(null, null, {
+// max_attempts: 4
+});
+
+redis.on("error", function (err) {
+ console.log("Redis says: " + err);
+});
+
+redis.on("ready", function () {
+ console.log("Redis ready.");
+});
+
+redis.on("reconnecting", function (arg) {
+ console.log("Redis reconnecting: " + JSON.stringify(arg));
+});
+redis.on("connect", function () {
+ console.log("Redis connected.");
+});
+
+setInterval(function () {
+ var now = Date.now();
+ redis.set("now", now, function (err, res) {
+ if (err) {
+ console.log(now + " Redis reply error: " + err);
+ } else {
+ console.log(now + " Redis reply: " + res);
+ }
+ });
+}, 100);
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/codec.js b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/codec.js
new file mode 100644
index 0000000..7d764f6
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/codec.js
@@ -0,0 +1,16 @@
+var json = {
+ encode: JSON.stringify,
+ decode: JSON.parse
+};
+
+var MsgPack = require('node-msgpack');
+msgpack = {
+ encode: MsgPack.pack,
+ decode: function(str) { return MsgPack.unpack(new Buffer(str)); }
+};
+
+bison = require('bison');
+
+module.exports = json;
+//module.exports = msgpack;
+//module.exports = bison;
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/pub.js b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/pub.js
new file mode 100644
index 0000000..0acde7a
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/pub.js
@@ -0,0 +1,38 @@
+'use strict';
+
+var freemem = require('os').freemem;
+var profiler = require('v8-profiler');
+var codec = require('../codec');
+
+var sent = 0;
+
+var pub = require('redis').createClient(null, null, {
+ //command_queue_high_water: 5,
+ //command_queue_low_water: 1
+})
+.on('ready', function() {
+ this.emit('drain');
+})
+.on('drain', function() {
+ process.nextTick(exec);
+});
+
+var payload = '1'; for (var i = 0; i < 12; ++i) payload += payload;
+console.log('Message payload length', payload.length);
+
+function exec() {
+ pub.publish('timeline', codec.encode({ foo: payload }));
+ ++sent;
+ if (!pub.should_buffer) {
+ process.nextTick(exec);
+ }
+}
+
+profiler.takeSnapshot('s_0');
+
+exec();
+
+setInterval(function() {
+ profiler.takeSnapshot('s_' + sent);
+ console.error('sent', sent, 'free', freemem(), 'cmdqlen', pub.command_queue.length, 'offqlen', pub.offline_queue.length);
+}, 2000);
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/run b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/run
new file mode 100755
index 0000000..bd9ac39
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/run
@@ -0,0 +1,10 @@
+#!/bin/sh
+node server.js &
+node server.js &
+node server.js &
+node server.js &
+node server.js &
+node server.js &
+node server.js &
+node server.js &
+node --debug pub.js
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/server.js b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/server.js
new file mode 100644
index 0000000..035e6b7
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/pubsub/server.js
@@ -0,0 +1,23 @@
+'use strict';
+
+var freemem = require('os').freemem;
+var codec = require('../codec');
+
+var id = Math.random();
+var recv = 0;
+
+var sub = require('redis').createClient()
+ .on('ready', function() {
+ this.subscribe('timeline');
+ })
+ .on('message', function(channel, message) {
+ var self = this;
+ if (message) {
+ message = codec.decode(message);
+ ++recv;
+ }
+ });
+
+setInterval(function() {
+ console.error('id', id, 'received', recv, 'free', freemem());
+}, 2000);
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/pub.js b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/pub.js
new file mode 100644
index 0000000..9caf1d0
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/pub.js
@@ -0,0 +1,49 @@
+'use strict';
+
+var freemem = require('os').freemem;
+//var profiler = require('v8-profiler');
+var codec = require('../codec');
+
+var sent = 0;
+
+var pub = require('redis').createClient(null, null, {
+ //command_queue_high_water: 5,
+ //command_queue_low_water: 1
+})
+.on('ready', function() {
+ this.del('timeline');
+ this.emit('drain');
+})
+.on('drain', function() {
+ process.nextTick(exec);
+});
+
+var payload = '1'; for (var i = 0; i < 12; ++i) payload += payload;
+console.log('Message payload length', payload.length);
+
+function exec() {
+ pub.rpush('timeline', codec.encode({ foo: payload }));
+ ++sent;
+ if (!pub.should_buffer) {
+ process.nextTick(exec);
+ }
+}
+
+//profiler.takeSnapshot('s_0');
+
+exec();
+
+setInterval(function() {
+ //var ss = profiler.takeSnapshot('s_' + sent);
+ //console.error(ss.stringify());
+ pub.llen('timeline', function(err, result) {
+ console.error('sent', sent, 'free', freemem(),
+ 'cmdqlen', pub.command_queue.length, 'offqlen', pub.offline_queue.length,
+ 'llen', result
+ );
+ });
+}, 2000);
+
+/*setTimeout(function() {
+ process.exit();
+}, 30000);*/
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/run b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/run
new file mode 100755
index 0000000..8045ae8
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/run
@@ -0,0 +1,6 @@
+#!/bin/sh
+node server.js &
+#node server.js &
+#node server.js &
+#node server.js &
+node --debug pub.js
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/server.js b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/server.js
new file mode 100644
index 0000000..9cbcdd9
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/rpushblpop/server.js
@@ -0,0 +1,30 @@
+'use strict';
+
+var freemem = require('os').freemem;
+var codec = require('../codec');
+
+var id = Math.random();
+var recv = 0;
+
+var cmd = require('redis').createClient();
+var sub = require('redis').createClient()
+ .on('ready', function() {
+ this.emit('timeline');
+ })
+ .on('timeline', function() {
+ var self = this;
+ this.blpop('timeline', 0, function(err, result) {
+ var message = result[1];
+ if (message) {
+ message = codec.decode(message);
+ ++recv;
+ }
+ self.emit('timeline');
+ });
+ });
+
+setInterval(function() {
+ cmd.llen('timeline', function(err, result) {
+ console.error('id', id, 'received', recv, 'free', freemem(), 'llen', result);
+ });
+}, 2000);
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/00 b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/00
new file mode 100644
index 0000000..29d7bf7
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/00
@@ -0,0 +1,13 @@
+# size JSON msgpack bison
+26602 2151.0170848180414
+25542 ? 2842.589272665782
+24835 ? ? 7280.4538397469805
+6104 6985.234528557929
+5045 ? 7217.461392841478
+4341 ? ? 14261.406335354604
+4180 15864.633685636572
+4143 ? 12954.806235781925
+4141 ? ? 44650.70733912719
+75 114227.07313350472
+40 ? 30162.440062810834
+39 ? ? 119815.66013519121
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/plot b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/plot
new file mode 100755
index 0000000..2563797
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/plot
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+gnuplot >size-rate.jpg << _EOF_
+
+set terminal png nocrop enhanced font verdana 12 size 640,480
+set logscale x
+set logscale y
+set grid
+set xlabel 'Serialized object size, octets'
+set ylabel 'decode(encode(obj)) rate, 1/sec'
+plot '00' using 1:2 title 'json' smooth bezier, '00' using 1:3 title 'msgpack' smooth bezier, '00' using 1:4 title 'bison' smooth bezier
+
+_EOF_
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/size-rate.png b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/size-rate.png
new file mode 100644
index 0000000..c9c2bee
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/size-rate.png
Binary files differ
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/speed.js b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/speed.js
new file mode 100644
index 0000000..8e43cbc
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/stress/speed/speed.js
@@ -0,0 +1,84 @@
+var msgpack = require('node-msgpack');
+var bison = require('bison');
+var codec = {
+ JSON: {
+ encode: JSON.stringify,
+ decode: JSON.parse
+ },
+ msgpack: {
+ encode: msgpack.pack,
+ decode: msgpack.unpack
+ },
+ bison: bison
+};
+
+var obj, l;
+
+var s = '0';
+for (var i = 0; i < 12; ++i) s += s;
+
+obj = {
+ foo: s,
+ arrrrrr: [{a:1,b:false,c:null,d:1.0}, 1111, 2222, 33333333],
+ rand: [],
+ a: s,
+ ccc: s,
+ b: s + s + s
+};
+for (i = 0; i < 100; ++i) obj.rand.push(Math.random());
+forObj(obj);
+
+obj = {
+ foo: s,
+ arrrrrr: [{a:1,b:false,c:null,d:1.0}, 1111, 2222, 33333333],
+ rand: []
+};
+for (i = 0; i < 100; ++i) obj.rand.push(Math.random());
+forObj(obj);
+
+obj = {
+ foo: s,
+ arrrrrr: [{a:1,b:false,c:null,d:1.0}, 1111, 2222, 33333333],
+ rand: []
+};
+forObj(obj);
+
+obj = {
+ arrrrrr: [{a:1,b:false,c:null,d:1.0}, 1111, 2222, 33333333],
+ rand: []
+};
+forObj(obj);
+
+function run(obj, codec) {
+ var t1 = Date.now();
+ var n = 10000;
+ for (var i = 0; i < n; ++i) {
+ codec.decode(l = codec.encode(obj));
+ }
+ var t2 = Date.now();
+ //console.log('DONE', n*1000/(t2-t1), 'codecs/sec, length=', l.length);
+ return [n*1000/(t2-t1), l.length];
+}
+
+function series(obj, cname, n) {
+ var rate = 0;
+ var len = 0;
+ for (var i = 0; i < n; ++i) {
+ var r = run(obj, codec[cname]);
+ rate += r[0];
+ len += r[1];
+ }
+ rate /= n;
+ len /= n;
+ console.log(cname + ' ' + rate + ' ' + len);
+ return [rate, len];
+}
+
+function forObj(obj) {
+ var r = {
+ JSON: series(obj, 'JSON', 20),
+ msgpack: series(obj, 'msgpack', 20),
+ bison: series(obj, 'bison', 20)
+ };
+ return r;
+}
diff --git a/signaling-server/node_modules/socket.io/node_modules/redis/benches/sub_quit_test.js b/signaling-server/node_modules/socket.io/node_modules/redis/benches/sub_quit_test.js
new file mode 100644
index 0000000..ad1f413
--- /dev/null
+++ b/signaling-server/node_modules/socket.io/node_modules/redis/benches/sub_quit_test.js
@@ -0,0 +1,18 @@
+var client = require("redis").createClient(),
+ client2 = require("redis").createClient();
+
+client.subscribe("something");
+client.on("subscribe", function (channel, count) {
+ console.log("Got sub: " + channel);
+ client.unsubscribe("something");
+});
+
+client.on("unsubscribe", function (channel, count) {
+ console.log("Got unsub: " + channel + ", quitting");
+ client.quit();
+});
+
+// exercise unsub before sub
+client2.unsubscribe("something");
+client2.subscribe("another thing");
+client2.quit();