-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathclient.js
67 lines (57 loc) · 1.74 KB
/
client.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
//Adapt these settings for different tests:
if (typeof(WebSocket) === 'undefined') WebSocket = require('ws');
if (typeof(performance) === 'undefined') performance = {now:require('performance-now')};
const MessagesPerInterval = 1000000;
let Intervals = 1;
const OverallMessages = MessagesPerInterval * Intervals;
let wsUri = "ws://localhost:9090/";
let MessageIndex = 1;
let StartTimes = [];
let SendTimeSum = 0;
function run() {
console.log('start');
console.time('overall time');
const Interval = setInterval(() => {
const Start = performance.now();
// const A = "SEND: " + MessageIndex + " TO " + (MessageIndex + MessagesPerInterval - 1);
// console.time(A);
for (let i = 0; i < MessagesPerInterval; ++i) {
websocket.send(MessageIndex);
}
StartTimes[MessageIndex.toString()] = performance.now();
MessageIndex += 1;
// console.timeEnd(A);
SendTimeSum += (performance.now() - Start);
Intervals -= 1;
if (Intervals === 0) {
clearInterval(Interval);
}
}, 1);
}
let TimeSum = 0;
let Count = 0;
function message(evt) {
const i = evt.data;
const Time = performance.now() - StartTimes[i];
TimeSum += Time;
Count += 1;
if (Count === OverallMessages) websocket.close();
// delete StartTimes[i];
// console.log(i + ' after ' + Time + 'ms');
}
function finish() {
console.log(Count, 'messages sent, average response latency:', (TimeSum / Count) + 'ms', 'sending took', (SendTimeSum) + 'ms');
console.timeEnd('overall time');
}
console.log('Sending', Intervals, 'times', MessagesPerInterval, 'messgages each.');
websocket = new WebSocket(wsUri);
websocket.onopen = function (evt) {
run();
};
websocket.onclose = function (evt) {
finish();
};
websocket.onmessage = message;
websocket.onerror = function (evt) {
console.error(evt.data);
};