|
@@ -8,25 +8,35 @@ def jsonMessage(code=0, msg="", data: object = None):
|
|
|
jsonData = {"code": code, "msg": msg, "data": data}
|
|
jsonData = {"code": code, "msg": msg, "data": data}
|
|
|
return json.dumps(jsonData)
|
|
return json.dumps(jsonData)
|
|
|
manager = ConnectionManager()
|
|
manager = ConnectionManager()
|
|
|
-
|
|
|
|
|
|
|
+active_connections = set()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@app.websocket("/ws")
|
|
@app.websocket("/ws")
|
|
|
async def websocket_endpoint(websocket: WebSocket):
|
|
async def websocket_endpoint(websocket: WebSocket):
|
|
|
await manager.connect(websocket)
|
|
await manager.connect(websocket)
|
|
|
|
|
+ active_connections.add(websocket)
|
|
|
try:
|
|
try:
|
|
|
- while True:
|
|
|
|
|
- '''接收json数据'''
|
|
|
|
|
- data = await websocket.receive_json()
|
|
|
|
|
- # 处理发送消息逻辑
|
|
|
|
|
- await handlerSend(data,websocket)
|
|
|
|
|
- # await manager.broadcast(f"Client # says: {data}")
|
|
|
|
|
|
|
+ async def handler_messages():
|
|
|
|
|
+ while True:
|
|
|
|
|
+ data = await websocket.receive_json()
|
|
|
|
|
+ await handlerSend(data,websocket)
|
|
|
|
|
+ await asyncio.gather( handler_messages(),)
|
|
|
except WebSocketDisconnect:
|
|
except WebSocketDisconnect:
|
|
|
- data = jsonMessage(code=1,data=None,msg="socket 内部错误")
|
|
|
|
|
- await manager.broadcast(data,websocket)
|
|
|
|
|
- manager.disconnect(websocket)
|
|
|
|
|
-
|
|
|
|
|
|
|
+ print("Client disconnected")
|
|
|
|
|
+ finally:
|
|
|
|
|
+ active_connections.discard(websocket)
|
|
|
|
|
+ # if websocket:
|
|
|
|
|
+ # await websocket.close()
|
|
|
|
|
+@app.on_event("shutdown")
|
|
|
|
|
+async def shutdown_event():
|
|
|
|
|
+ print("Shutting down...")
|
|
|
|
|
+ # 清理操作
|
|
|
|
|
+ for connection in list(active_connections):
|
|
|
|
|
+ try:
|
|
|
|
|
+ await connection.close()
|
|
|
|
|
+ except Exception as e:
|
|
|
|
|
+ print(f"Error closing connection: {e}")
|
|
|
async def handlerSend(receiveData,websocket):
|
|
async def handlerSend(receiveData,websocket):
|
|
|
# 处理消息发送逻辑
|
|
# 处理消息发送逻辑
|
|
|
jsonType = receiveData.get("type")
|
|
jsonType = receiveData.get("type")
|