import json from . import api from quart import Quart, websocket, jsonify from mycode.WebSocketManager import g_WSM # WebSocket 路由,端口默认与 HTTP 同端口,例如 5000(开发时) @api.websocket("/ws") async def ws(): """ WebSocket 连接入口: 1. 客户端连接成功后,首先应发送登录数据包,例如 {"user_id": 1} 2. 后端解析登录数据包,将 user_id 与 websocket 绑定(注册) 3. 后续进入消息接收循环,根据数据协议(TFTF+头+体格式)处理数据 """ # 接收登录数据包(假设为纯 JSON 包,非二进制格式) login_msg = await websocket.receive() try: login_data = json.loads(login_msg) user_id = login_data.get("user_id") if user_id is None: error_msg = g_WSM.create_binary_error_message("没有提供user_id") await websocket.send(error_msg) return # 注册当前连接 await g_WSM.register(user_id, websocket) except Exception as e: errof_msg = g_WSM.create_binary_error_message(str(e)) await websocket.send(errof_msg) return try: # 主循环:接收后续消息并处理;此处可以根据协议解析消息 ---暂时无web发送数据的业务 while True: message = await websocket.receive() # 这里可以添加对接收到的消息解析处理,根据协议分离 TFTF 等 print("收到消息:", message) # 例如,直接回显消息;实际项目中应解析消息格式并调用相应的业务逻辑 # await websocket.send(message) except Exception as e: print("WebSocket 出现异常:", e) finally: # 注销当前连接 await g_WSM.unregister(user_id)