-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.py
40 lines (29 loc) · 1.08 KB
/
server.py
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
"""Simulate a server that sends messages faster than they can be processed."""
import asyncio
import json
import time
import websockets
from loguru import logger as log
from loremipsum import generate_paragraph
def json_lorem_ipsum():
"""Generate a random JSON message."""
message = generate_paragraph()[2]
return json.dumps({"message": message})
async def echo(websocket) -> None:
log.info("Client connected!")
sent_count = 0
try:
while True:
message = json_lorem_ipsum()
await websocket.send(message)
log.info(f"Sent message #{sent_count + 1}")
# Send messages faster than they can be processed to simulate backpressure
time.sleep(0.02)
sent_count += 1
except websockets.ConnectionClosed as error:
log.error("Connection with client closed: ", error.code, error.reason)
log.error(error)
log.info("Starting server...")
start_server = websockets.serve(echo, "localhost", 8765)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()