Initial commit: dpdk-ws-client source code
This commit is contained in:
Executable
+61
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Simple WebSocket echo server for testing DPDK WebSocket client."""
|
||||
|
||||
import asyncio
|
||||
import websockets
|
||||
import json
|
||||
import sys
|
||||
import time
|
||||
|
||||
connected_clients = set()
|
||||
|
||||
async def handler(websocket):
|
||||
client_addr = websocket.remote_address
|
||||
path = websocket.request.path if hasattr(websocket, 'request') else "/"
|
||||
print(f"[CONNECT] {client_addr}, path: {path}")
|
||||
connected_clients.add(websocket)
|
||||
try:
|
||||
async for message in websocket:
|
||||
print(f"[RECV] {message}")
|
||||
try:
|
||||
data = json.loads(message)
|
||||
action = data.get("action", "")
|
||||
topic = data.get("topic", "")
|
||||
if action == "subscribe":
|
||||
resp = json.dumps({"status":"ok","action":"subscribed","topic":topic,"timestamp":int(time.time())})
|
||||
await websocket.send(resp)
|
||||
print(f"[SEND] {resp}")
|
||||
push = json.dumps({"type":"push","topic":topic,"data":f"Welcome to {topic}!","timestamp":int(time.time())})
|
||||
await websocket.send(push)
|
||||
print(f"[SEND] {push}")
|
||||
continue
|
||||
except (json.JSONDecodeError, TypeError):
|
||||
pass
|
||||
response = f"ECHO: {message}"
|
||||
await websocket.send(response)
|
||||
print(f"[SEND] {response}")
|
||||
except websockets.exceptions.ConnectionClosed:
|
||||
print(f"[DISCONNECT] {client_addr}")
|
||||
finally:
|
||||
connected_clients.discard(websocket)
|
||||
|
||||
async def push_loop(interval=10):
|
||||
count = 0
|
||||
while True:
|
||||
await asyncio.sleep(interval)
|
||||
if connected_clients:
|
||||
count += 1
|
||||
msg = json.dumps({"type":"push","data":f"Periodic update #{count}","timestamp":int(time.time())})
|
||||
websockets.broadcast(connected_clients, msg)
|
||||
print(f"[PUSH] {msg}")
|
||||
|
||||
async def main(port=8080):
|
||||
print(f"WebSocket Test Server on ws://0.0.0.0:{port}")
|
||||
async with websockets.serve(handler, "0.0.0.0", port):
|
||||
asyncio.create_task(push_loop(10))
|
||||
print(f"[READY] Waiting for DPDK client...")
|
||||
await asyncio.Future()
|
||||
|
||||
if __name__ == "__main__":
|
||||
port = int(sys.argv[1]) if len(sys.argv) > 1 else 8080
|
||||
asyncio.run(main(port))
|
||||
Reference in New Issue
Block a user