95 lines
2.2 KiB
JavaScript
95 lines
2.2 KiB
JavaScript
'use strict';
|
|
|
|
const benchmark = require('benchmark');
|
|
const crypto = require('crypto');
|
|
|
|
const WebSocket = require('..');
|
|
|
|
const Receiver = WebSocket.Receiver;
|
|
const Sender = WebSocket.Sender;
|
|
|
|
const options = {
|
|
fin: true,
|
|
rsv1: false,
|
|
mask: true,
|
|
readOnly: false
|
|
};
|
|
|
|
function createBinaryFrame(length) {
|
|
const list = Sender.frame(crypto.randomBytes(length), {
|
|
opcode: 0x02,
|
|
...options
|
|
});
|
|
|
|
return Buffer.concat(list);
|
|
}
|
|
|
|
const pingFrame1 = Buffer.concat(
|
|
Sender.frame(crypto.randomBytes(5), { opcode: 0x09, ...options })
|
|
);
|
|
|
|
const textFrame = Buffer.from('819461616161' + '61'.repeat(20), 'hex');
|
|
const pingFrame2 = Buffer.from('8980146e915a', 'hex');
|
|
const binaryFrame1 = createBinaryFrame(125);
|
|
const binaryFrame2 = createBinaryFrame(65535);
|
|
const binaryFrame3 = createBinaryFrame(200 * 1024);
|
|
const binaryFrame4 = createBinaryFrame(1024 * 1024);
|
|
|
|
const suite = new benchmark.Suite();
|
|
const receiver = new Receiver({
|
|
binaryType: 'nodebuffer',
|
|
extensions: {},
|
|
isServer: true,
|
|
skipUTF8Validation: false
|
|
});
|
|
|
|
suite.add('ping frame (5 bytes payload)', {
|
|
defer: true,
|
|
fn: (deferred) => {
|
|
receiver.write(pingFrame1, deferred.resolve.bind(deferred));
|
|
}
|
|
});
|
|
suite.add('ping frame (no payload)', {
|
|
defer: true,
|
|
fn: (deferred) => {
|
|
receiver.write(pingFrame2, deferred.resolve.bind(deferred));
|
|
}
|
|
});
|
|
suite.add('text frame (20 bytes payload)', {
|
|
defer: true,
|
|
fn: (deferred) => {
|
|
receiver.write(textFrame, deferred.resolve.bind(deferred));
|
|
}
|
|
});
|
|
suite.add('binary frame (125 bytes payload)', {
|
|
defer: true,
|
|
fn: (deferred) => {
|
|
receiver.write(binaryFrame1, deferred.resolve.bind(deferred));
|
|
}
|
|
});
|
|
suite.add('binary frame (65535 bytes payload)', {
|
|
defer: true,
|
|
fn: (deferred) => {
|
|
receiver.write(binaryFrame2, deferred.resolve.bind(deferred));
|
|
}
|
|
});
|
|
suite.add('binary frame (200 KiB payload)', {
|
|
defer: true,
|
|
fn: (deferred) => {
|
|
receiver.write(binaryFrame3, deferred.resolve.bind(deferred));
|
|
}
|
|
});
|
|
suite.add('binary frame (1 MiB payload)', {
|
|
defer: true,
|
|
fn: (deferred) => {
|
|
receiver.write(binaryFrame4, deferred.resolve.bind(deferred));
|
|
}
|
|
});
|
|
|
|
suite.on('cycle', (e) => console.log(e.target.toString()));
|
|
|
|
if (require.main === module) {
|
|
suite.run({ async: true });
|
|
} else {
|
|
module.exports = suite;
|
|
}
|