Skip to content

Commit c5c0de1

Browse files
committed
WIP: socketio client and server
1 parent e600e31 commit c5c0de1

File tree

9 files changed

+66
-46
lines changed

9 files changed

+66
-46
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
node_modules
22
__pycache__
33
.vscode
4-
.ipynb_checkpoints
4+
.ipynb_checkpoints
5+
yarn-error.log

src/clients/ws/socketio_client.js

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

33
import io from 'socket.io-client'
4-
import { host, port, httpApi, iters } from '../config'
4+
import { host, port, wsApi, iters } from '../config'
55
import PerformanceTimer from '../PerformanceTimer'
66
import { Deferred, randomName } from '../utils'
77

8+
function createRequester(socket) {
9+
const requester = {
10+
incoming: null,
11+
greeting(data) {
12+
// new incoming message on the way
13+
const incoming = requester.incoming = new Deferred()
14+
socket.send(data)
15+
return incoming.promise
16+
}
17+
}
18+
19+
return requester
20+
}
21+
822
async function runTest() {
923
console.log(`SocketIO client connecting to http://${host}:${port}`)
1024

1125
const timer = new PerformanceTimer()
1226
const connect = new Deferred()
13-
const socket = io(httpApi, { transports: ['websocket'] })
27+
const socket = io(wsApi, { transports: ['websocket'] })
1428

1529
socket.on('connect', () => connect.resolve())
1630
socket.on('connect_error', err => connect.reject(err))
@@ -19,28 +33,30 @@ async function runTest() {
1933
await connect.promise
2034

2135
console.log(`Running test with ${iters} iterations...`)
22-
23-
const requestGreeting = () => socket.send({ name: randomName() })
24-
25-
socket.on('message', data => {
36+
37+
const requester = createRequester(socket)
38+
39+
socket.on('message', data => requester.incoming.resolve(data))
40+
41+
let i = iters
42+
await (async function asyncLoop() {
43+
const sendData = { name: randomName() }
44+
const data = await requester.greeting(sendData)
2645
const { greeting } = data
27-
28-
if (--iters > 0) {
29-
requestGreeting()
30-
} else {
46+
47+
if (--i === 0) {
3148
console.log(`Last greeting: ${greeting}`)
32-
timer.end()
33-
socket.close()
49+
return
3450
}
35-
})
36-
37-
timer.start()
3851

39-
requestGreeting()
52+
await asyncLoop()
53+
})()
54+
55+
timer.end()
56+
socket.close()
4057

4158
} catch(err) {
4259
console.error('Error connecting')
43-
socket.close()
4460
}
4561
}
4662

src/servers/http/fastapi_server.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
#!/usr/bin/env python
22

33
import uvicorn
4-
import argparse
54
import json
65
from fastapi import FastAPI
76
from pydantic import BaseModel
@@ -14,7 +13,8 @@ class Data(BaseModel): name: str
1413

1514
@app.post('/greeting')
1615
def greeting(data: Data):
17-
return { 'greeting': random_greeting(data.name) }
16+
greeting = random_greeting(data.name)
17+
return { 'greeting': greeting }
1818

1919
def run_test():
2020
print('Server starting at ' + 'http://{}:{}'.format(host, port))

src/servers/http/flask_server.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
def greeting():
1515
json = request.get_json()
1616
name = json.get('name')
17+
greeting = random_greeting(name)
1718
return jsonify(greeting = random_greeting(name))
1819

1920
def run_test():

src/servers/http/pyramid_server.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99

1010
def greeting(request):
1111
data = request.json_body
12-
return { 'greeting': random_greeting(data['name']) }
12+
greeting = random_greeting(data['name'])
13+
return { 'greeting': greeting }
1314

1415
def run_test():
1516
# print('Server starting at ' + 'http://{}:{}'.format(host, port))

src/servers/http/tornado_server.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
class GreetingHandler(RequestHandler):
1010
def post(self):
1111
data = json.loads(self.request.body)
12+
greeting = random_greeting(data['name'])
1213
self.set_header('Content-Type', 'application/json')
13-
self.write(json.dumps({ 'greeting': random_greeting(data['name']) }))
14+
self.write(json.dumps({ 'greeting': greeting }))
1415

1516
def make_app():
1617
urls = [('/greeting', GreetingHandler)]

src/servers/ws/eventlet_server.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import json
44
import eventlet
5-
import argparse
65
from eventlet import wsgi, websocket
76
from src.servers.config import host, port
87
from src.servers.utils import random_greeting
@@ -14,7 +13,8 @@ def greeting_handle(ws):
1413
if message is None: break
1514

1615
data = json.loads(message)
17-
ws.send(json.dumps({ 'greeting': random_greeting(data['name']) }))
16+
greeting = random_greeting(data['name'])
17+
ws.send(json.dumps({ 'greeting': greeting }))
1818

1919
def site(env, start_response):
2020
if env['PATH_INFO'] == '/greeting':

src/servers/ws/fastapi-websocket_server.py

100644100755
Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
#!/usr/bin/env python
22

3-
from fastapi import FastAPI, WebSocket
4-
import argparse
53
import uvicorn
4+
from fastapi import FastAPI, WebSocket
5+
from src.servers.config import host, port
6+
from src.servers.utils import random_greeting
67

78
app = FastAPI()
89

@@ -12,16 +13,15 @@ async def greeting(websocket: WebSocket):
1213
while True:
1314
try:
1415
data = await websocket.receive_json()
15-
await websocket.send_json({ 'greeting': data['name'] })
16+
greeting = random_greeting(data['name'])
17+
await websocket.send_json({ 'greeting': greeting })
1618
except:
1719
await websocket.close()
1820
break
1921

22+
def run_test():
23+
print('Server starting at: ' + 'ws://{}:{}/greeting'.format(host, port))
24+
uvicorn.run(app, host=host, port=port, log_level='error')
25+
2026
if __name__ == '__main__':
21-
parser = argparse.ArgumentParser()
22-
parser.add_argument('-l', '--host', default='0.0.0.0')
23-
parser.add_argument('-p', '--port', default=5000, type=int)
24-
25-
args = parser.parse_args()
26-
print('Server starting at: ' + 'ws://{}:{}/greeting'.format(args.host, args.port))
27-
uvicorn.run(app, host=args.host, port=args.port, log_level='error')
27+
run_test()

src/servers/ws/flask-socketio_server.py

100644100755
Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
#!/usr/bin/env python
22

3+
import logging
34
from flask import Flask, render_template
45
from flask_socketio import SocketIO, send
5-
import argparse
6-
import logging
6+
from src.servers.config import host, port
7+
from src.servers.utils import random_greeting
78

8-
log = logging.getLogger('werkzeug')
9-
log.setLevel(logging.ERROR)
9+
# log = logging.getLogger('werkzeug')
10+
# log.setLevel(logging.ERROR)
1011

1112
app = Flask(__name__)
1213
app.config['SECRET_KEY'] = 'secret!'
1314
socketio = SocketIO(app)
1415

1516
@socketio.on('message', namespace='/greeting')
1617
def greeting(data):
17-
send({'greeting': data['name']})
18+
greeting = random_greeting(data['name'])
19+
send({ 'greeting': greeting })
1820

19-
if __name__ == '__main__':
20-
parser = argparse.ArgumentParser()
21-
parser.add_argument('-l', '--host', default='0.0.0.0')
22-
parser.add_argument('-p', '--port', default=5000, type=int)
21+
def run_test():
22+
print('Server starting at: ' + 'ws://{}:{}'.format(host, port))
23+
socketio.run(app, host=host, port=port)
2324

24-
args = parser.parse_args()
25-
print('Server starting at: ' + 'ws://{}:{}'.format(args.host, args.port))
26-
socketio.run(app, host=args.host, port=args.port)
25+
if __name__ == '__main__':
26+
run_test()

0 commit comments

Comments
 (0)