Skip to content

Commit 435a16e

Browse files
committed
Added websockets server
1 parent 6d81ce0 commit 435a16e

File tree

4 files changed

+86
-2
lines changed

4 files changed

+86
-2
lines changed

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,11 @@
1313
"fastapi-websocket": "python src/servers/fastapi-websocket_server.py --port 5002",
1414
"socketio-flask-socketio": "PORT=5003 SERVER=flask-socketio babel-node src/clients/socketio_client.js",
1515
"flask-socketio": "python src/servers/flask-socketio_server.py --port 5003",
16+
"ws-eventlet": "PORT=5004 SERVER=eventlet babel-node src/clients/ws_client.js",
1617
"websocket-eventlet": "PORT=5004 SERVER=eventlet babel-node src/clients/websocket_client.js",
17-
"eventlet": "python src/servers/eventlet_server.py --port 5004"
18+
"eventlet": "python src/servers/eventlet_server.py --port 5004",
19+
"websocket-websockets": "PORT=5005 SERVER=websockets babel-node src/clients/websocket_client.js",
20+
"websockets": "python src/servers/websockets_server.py --port 5005"
1821
},
1922
"repository": {
2023
"type": "git",

src/clients/websocket_client.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ const port = process.env.PORT || 5000
66
const server = process.env.SERVER || 'unknown'
77
const wsApi = `ws://${host}:${port}/hello`
88

9-
let iters = 1
9+
let iters = 10000
1010

1111
async function runTest() {
1212
console.log(`websocket client <===> ${server} server on ws://${host}:${port}/hello`)

src/clients/ws_client.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
const { PerformanceObserver, performance } = require('perf_hooks')
2+
const WebSocket = require('ws')
3+
4+
const host = process.env.HOST || '0.0.0.0'
5+
const port = process.env.PORT || 5000
6+
const server = process.env.SERVER || 'unknown'
7+
const wsApi = `ws://${host}:${port}/hello`
8+
9+
let iters = 10000
10+
11+
async function runTest() {
12+
console.log(`ws client <===> ${server} server on ws://${host}:${port}/hello`)
13+
14+
const ws = new WebSocket(wsApi)
15+
16+
function requestHello() {
17+
ws.send(JSON.stringify({ name: 'Fran' }))
18+
}
19+
20+
ws.on('open', () => {
21+
console.log(`Running test with ${iters} iterations...`)
22+
23+
ws.on('message', message => {
24+
const data = JSON.parse(message)
25+
const { hello } = data
26+
27+
if (--iters > 0) {
28+
requestHello()
29+
} else {
30+
performance.mark('END')
31+
performance.measure('START to END', 'START', 'END')
32+
33+
ws.terminate()
34+
}
35+
})
36+
37+
performance.mark('START')
38+
39+
requestHello()
40+
})
41+
}
42+
43+
const obs = new PerformanceObserver(items => {
44+
console.log('End test')
45+
console.log(`Duration: ${items.getEntries()[0].duration}`)
46+
performance.clearMarks()
47+
})
48+
49+
obs.observe({ entryTypes: ['measure'] })
50+
51+
runTest()

src/servers/websockets_server.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import asyncio
2+
import websockets
3+
import json
4+
import argparse
5+
import logging
6+
7+
logger = logging.getLogger('websockets.server')
8+
logger.setLevel(logging.ERROR)
9+
10+
async def hello(websocket, path):
11+
if path == '/hello':
12+
while True:
13+
try:
14+
message = await websocket.recv()
15+
data = json.loads(message)
16+
await websocket.send(json.dumps({ 'hello': data['name'] }))
17+
except:
18+
await websocket.close()
19+
break
20+
21+
if __name__ == '__main__':
22+
parser = argparse.ArgumentParser()
23+
parser.add_argument('-l', '--host', default='0.0.0.0')
24+
parser.add_argument('-p', '--port', default=5005, type=int)
25+
26+
args = parser.parse_args()
27+
print('Server starting at: ' + 'ws://{}:{}'.format(args.host, args.port))
28+
start_server = websockets.serve(hello, host=args.host, port=args.port)
29+
asyncio.get_event_loop().run_until_complete(start_server)
30+
asyncio.get_event_loop().run_forever()

0 commit comments

Comments
 (0)