From f64c7cd5da603ab83a430f5f8bbed508d3c2635d Mon Sep 17 00:00:00 2001 From: Ws <526252549@qq.com> Date: Wed, 24 Jan 2018 22:14:09 +0800 Subject: [PATCH 1/4] feat (wsworker) which is a simple websocket --- lib/worker.js | 3 +++ lib/workers/wsworker.js | 39 +++++++++++++++++++++++++++++++++++++++ package-lock.json | 33 +++++++++++++++++++++++++++++++++ package.json | 15 ++++++++------- 4 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 lib/workers/wsworker.js create mode 100644 package-lock.json diff --git a/lib/worker.js b/lib/worker.js index 27f2d01..0df9a47 100644 --- a/lib/worker.js +++ b/lib/worker.js @@ -29,6 +29,9 @@ switch (workerType) { case 'wamp': BenchmarkWorker = require('./workers/wampworker.js'); break; + case 'ws': + BenchmarkWorker = require('./workers/wsworker.js'); + break; default: logger.error('error workerType ' + workerType); } diff --git a/lib/workers/wsworker.js b/lib/workers/wsworker.js new file mode 100644 index 0000000..3cfc3ca --- /dev/null +++ b/lib/workers/wsworker.js @@ -0,0 +1,39 @@ +/*global module, require*/ +var ws = require('ws'), + util = require('util'), + BaseWorker = require('./baseworker.js'), + logger = require('../logger.js'); + +/** + * SocketIOWorker Worker class inherits form BaseWorker + */ +var SocketIOWorker = function (server, generator) { + SocketIOWorker.super_.apply(this, arguments); +}; + +util.inherits(SocketIOWorker, BaseWorker); + +SocketIOWorker.prototype.createClient = function (callback) { + var self = this; + var client = new ws(this.server, { 'force new connection' : true}); + + client.on('open', function () { + callback(false, client); + }); + + client.on('close', function (err) { + if (self.verbose) { + logger.error("SocketIO Worker connect_failed" + JSON.stringify(err)); + } + callback(true, client); + }); + + client.on('error', function (err) { + if (self.verbose) { + logger.error("SocketIO Worker error: " + JSON.stringify(err)); + } + callback(true, client); + }); +}; + +module.exports = SocketIOWorker; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..5905532 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,33 @@ +{ + "name": "websocket-bench", + "version": "0.2.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "ultron": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", + "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" + }, + "ws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.0.0.tgz", + "integrity": "sha512-QYslsH44bH8O7/W2815u5DpnCpXWpEK44FmaHffNwgJI4JMaSZONgPBTOfrxJ29mXKbXak+LsJ2uAkDTYq2ptQ==", + "requires": { + "async-limiter": "1.0.0", + "safe-buffer": "5.1.1", + "ultron": "1.1.1" + } + } + } +} diff --git a/package.json b/package.json index f6c8182..9781852 100644 --- a/package.json +++ b/package.json @@ -16,16 +16,17 @@ "author": "", "license": "BSD", "dependencies": { - "socket.io-client": "~1.3.5", - "engine.io-client": "~0.9.0", - "commander": "~1.1.1", - "colors": "~0.6", + "autobahn": "~0.9.5", "cli-table": "~0.3.0", + "colors": "~0.6", + "commander": "~1.1.1", + "engine.io-client": "~0.9.0", "faye": "~0.8.9", - "winston": "~0.7.1", - "socket.io": "~1.3.5", "primus": "~1.5.2", - "autobahn": "~0.9.5" + "socket.io": "~1.3.5", + "socket.io-client": "~1.3.5", + "winston": "~0.7.1", + "ws": "^4.0.0" }, "devDependencies": { "chai": "~1.6.0", From 4a9afc5eff5ae420e4b65f6433f3b313863fd690 Mon Sep 17 00:00:00 2001 From: Ws <526252549@qq.com> Date: Wed, 24 Jan 2018 22:14:57 +0800 Subject: [PATCH 2/4] delete package-lock --- package-lock.json | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 5905532..0000000 --- a/package-lock.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "websocket-bench", - "version": "0.2.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "safe-buffer": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" - }, - "ultron": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz", - "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==" - }, - "ws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-4.0.0.tgz", - "integrity": "sha512-QYslsH44bH8O7/W2815u5DpnCpXWpEK44FmaHffNwgJI4JMaSZONgPBTOfrxJ29mXKbXak+LsJ2uAkDTYq2ptQ==", - "requires": { - "async-limiter": "1.0.0", - "safe-buffer": "5.1.1", - "ultron": "1.1.1" - } - } - } -} From 6bd4be118c191e1e7da28024fbcc2b5028c918c0 Mon Sep 17 00:00:00 2001 From: Ws <526252549@qq.com> Date: Wed, 24 Jan 2018 22:26:44 +0800 Subject: [PATCH 3/4] feat options & generator --- index.js | 2 +- lib/generator.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 341884e..fdcb63f 100644 --- a/index.js +++ b/index.js @@ -16,7 +16,7 @@ program .option('-m, --message ', 'number of message for a client. Default to 0', parseInt) .option('-o, --output ', 'Output file') .option('-t, --type ', 'type of websocket server to bench(socket.io, engine.io, faye, primus, wamp). Default to io') - .option('-p, --transport ', 'type of transport to websocket(engine.io, websockets, browserchannel, sockjs, socket.io). Default to websockets') + .option('-p, --transport ', 'type of transport to websocket(engine.io, websockets, browserchannel, sockjs, socket.io, ws). Default to websockets') .option('-k, --keep-alive', 'Keep alive connection') .option('-v, --verbose', 'Verbose Logging') .parse(process.argv); diff --git a/lib/generator.js b/lib/generator.js index e4d3f5f..89d780e 100644 --- a/lib/generator.js +++ b/lib/generator.js @@ -36,6 +36,7 @@ module.exports = { // Your logic //client.emit('test', { hello: 'world' }); //client.publish('/test', { hello: 'world' }); + //client.send(JSON.stringify({hello: 'world'})); done(); } }; From 2511d5a1f997ef7a31aa10af33c1d06102ce8bd8 Mon Sep 17 00:00:00 2001 From: Ws <526252549@qq.com> Date: Wed, 24 Jan 2018 22:31:52 +0800 Subject: [PATCH 4/4] feat README.md --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 782cbd8..08613c7 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,7 @@ Nodejs cli tool for benchmarking websocket servers. Currently supports: * [Faye](https://github.com/faye/faye) * [Primus](https://github.com/primus/primus) * [WAMP](https://github.com/tavendo/AutobahnJS) +* [ws](https://github.com/websockets/ws) ## Installation @@ -45,7 +46,7 @@ command help -g, --generator Js file for generate message or special event -m, --message Number of message for a client. Default to 0 -o, --output Output file - -t, --type Type of websocket server to bench(socket.io, engine.io, faye, primus, wamp). Default to socket.io + -t, --type Type of websocket server to bench(socket.io, engine.io, faye, primus, wamp, ws). Default to socket.io -p, --transport Type of transport to websocket(engine.io, websockets, browserchannel, sockjs, socket.io). Default to websockets (Just for Primus) -k, --keep-alive Keep alive connection -v, --verbose Verbose Logging @@ -88,6 +89,9 @@ generator structure : // WAMP session // client.subscribe('com.myapp.hello').then(function(args) { }); + // ws client + // client.send("Hello World"); + done(); }, @@ -101,6 +105,7 @@ generator structure : // client.emit('test', { hello: 'world' }); // client.publish('/test', { hello: 'world' }); // client.call('com.myapp.add2', [2, 3]).then(function (res) { }); + // client.send('hello world'); done(); },