rambo 9 месяцев назад
Родитель
Сommit
0eae9a6ba1
4 измененных файлов с 26 добавлено и 16 удалено
  1. 4 1
      python/index.py
  2. 1 4
      python/middleware.py
  3. BIN
      python/requestments.txt
  4. 21 11
      python/sockets/socket_server.py

+ 4 - 1
python/index.py

@@ -5,6 +5,9 @@ from api import *
 from sockets.socket_server import *
 def handle_shutdown(signum, frame):
     """关闭系统应用服务"""
+     # 终止事件循环
+    loop = asyncio.get_event_loop()
+    loop.call_soon_threadsafe(loop.stop)
     sys.exit(0)
 
 
@@ -18,6 +21,6 @@ if __name__ == "__main__":
         APP_RUN,
         host=APP_HOST,
         port=int(PORT),
-        reload=IS_DEBUG,
+        reload=False,
         workers=int(APP_WORKS),
     )

+ 1 - 4
python/middleware.py

@@ -58,7 +58,4 @@ async def global_exception_handler(request, exc):
     return JSONResponse(
         {"code": exc.status_code, "err_msg": err_msg, "status": "Failed"}
     )
-@app.on_event("shutdown")
-async def shutdown_event():
-    # 清理操作
-    print("服务关闭完成,done!")
+

BIN
python/requestments.txt


+ 21 - 11
python/sockets/socket_server.py

@@ -8,25 +8,35 @@ def jsonMessage(code=0, msg="", data: object = None):
     jsonData = {"code": code, "msg": msg, "data": data}
     return json.dumps(jsonData)
 manager = ConnectionManager()
-
+active_connections = set()
 
 
 
 @app.websocket("/ws")
 async def websocket_endpoint(websocket: WebSocket):
     await manager.connect(websocket)
+    active_connections.add(websocket)
     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:
-        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):
     # 处理消息发送逻辑
     jsonType = receiveData.get("type")