Skip to content

Commit e600e31

Browse files
committed
Refactored ws client
1 parent 6d8f7d4 commit e600e31

File tree

3 files changed

+48
-37
lines changed

3 files changed

+48
-37
lines changed

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@
88
"fetch-client": "babel-node src/clients/http/fetch_client.js",
99
"superagent-client": "babel-node src/clients/http/superagent_client.js",
1010
"socketio-client": "babel-node src/clients/ws/socketio_client.js",
11-
"websocket-client": "babel-node src/clients/ws/websocket_client.js"
11+
"websocket-client": "babel-node src/clients/ws/websocket_client.js",
12+
"ws-client": "babel-node src/clients/ws/ws_client.js"
1213
},
1314
"repository": {
1415
"type": "git",
1516
"url": "git+https://github.com/jscriptcoder/HTTP-vs-WebSockets-performance.git"
1617
},
17-
"author": "[email protected]",
18+
"author": "Francisco Ramos <[email protected]>",
1819
"license": "ISC",
1920
"bugs": {
2021
"url": "https://github.com/jscriptcoder/HTTP-vs-WebSockets-performance/issues"
@@ -23,7 +24,7 @@
2324
"dependencies": {
2425
"@stomp/stompjs": "^5.4.4",
2526
"axios": "^0.20.0",
26-
"chalk": "^4.1.0",
27+
"chalk": "^4.1.0",
2728
"node-fetch": "^2.6.1",
2829
"socket.io-client": "^2.3.0",
2930
"superagent": "^6.1.0",

src/clients/ws/websocket_client.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ async function runTest() {
5959

6060
// https://www.iana.org/assignments/websocket/websocket.xhtml#close-code-number
6161
connection.close(1000, 'Done testing')
62-
62+
6363
} catch(err) {
6464
console.error('Error connecting')
6565
}

src/clients/ws/ws_client.js

Lines changed: 43 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,66 @@
11
#!/usr/bin/env node
22

3-
const { PerformanceObserver, performance } = require('perf_hooks')
4-
const WebSocket = require('ws')
5-
import { randomName } from '../utils'
3+
import WebSocket from 'ws'
4+
import { host, port, wsApi, iters } from '../config'
5+
import PerformanceTimer from '../PerformanceTimer'
6+
import { Deferred, randomName } from '../utils'
67

7-
const host = process.env.HOST || '0.0.0.0'
8-
const port = process.env.PORT || 5000
9-
const server = process.env.SERVER || 'unknown'
10-
const wsApi = `ws://${host}:${port}/greeting`
8+
function createRequester(ws) {
9+
const requester = {
10+
incoming: null,
11+
greeting(data) {
12+
// new incoming message on the way
13+
const incoming = requester.incoming = new Deferred()
14+
ws.send(JSON.stringify(data))
15+
return incoming.promise
16+
}
17+
}
1118

12-
let iters = 10000
19+
return requester
20+
}
1321

1422
async function runTest() {
15-
console.log(`ws client <===> ${server} server on ws://${host}:${port}/greeting`)
23+
console.log(`ws client connecting to ws://${host}:${port}/greeting`)
1624

25+
const timer = new PerformanceTimer()
26+
const connect = new Deferred()
1727
const ws = new WebSocket(wsApi)
1828

19-
function requestGreeting() {
20-
ws.send(JSON.stringify({ name: randomName() }))
21-
}
29+
ws.on('open', () => connect.resolve())
30+
ws.on('error', err => connect.reject(err))
31+
32+
try {
33+
await connect.promise
2234

23-
ws.on('open', () => {
2435
console.log(`Running test with ${iters} iterations...`)
2536

26-
ws.on('message', message => {
37+
const requester = createRequester(ws)
38+
39+
ws.on('message', message => requester.incoming.resolve(message))
40+
41+
let i = iters
42+
await (async function asyncLoop() {
43+
const sendData = { name: randomName() }
44+
const message = await requester.greeting(sendData)
2745
const data = JSON.parse(message)
2846
const { greeting } = data
29-
30-
if (--iters > 0) {
31-
requestGreeting()
32-
} else {
33-
performance.mark('END')
34-
performance.measure('START to END', 'START', 'END')
3547

36-
ws.terminate()
48+
if (--i === 0) {
49+
console.log(`Last greeting: ${greeting}`)
50+
return
3751
}
38-
})
52+
53+
await asyncLoop()
54+
})()
3955

40-
performance.mark('START')
56+
timer.end()
57+
ws.terminate()
4158

42-
requestGreeting()
43-
})
59+
} catch(err) {
60+
console.error('Error connecting')
61+
}
4462
}
4563

46-
const obs = new PerformanceObserver(items => {
47-
console.log('End test')
48-
console.log(`Duration: ${items.getEntries()[0].duration}`)
49-
performance.clearMarks()
50-
})
51-
52-
obs.observe({ entryTypes: ['measure'] })
53-
5464
if (require.main === module) {
5565
runTest()
5666
}

0 commit comments

Comments
 (0)