feat: websocket 连接通信测试

This commit is contained in:
martsforever
2025-11-01 18:22:10 +08:00
parent df72ce8577
commit be1e5a3290
4 changed files with 123 additions and 1 deletions
+35
View File
@@ -0,0 +1,35 @@
import asyncio
from typing import List, Optional
from fastapi import FastAPI, WebSocket, Query
from starlette.websockets import WebSocketState
def add_websocket_route(app: FastAPI):
person_name_to_socket: dict[str, WebSocket] = {}
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket, name: str = Query(..., description="用户名称")):
if person_name_to_socket.get(name, None) is not None:
raise Exception("用户已经连接")
print("新用户连接", name)
# 接收连接
await websocket.accept()
# 保存连接
person_name_to_socket[name] = websocket
try:
while True:
# 将接收得到消息发送供其他用户
data = await websocket.receive_text()
for person_name, person_socket in person_name_to_socket.items():
if person_name != name:
await person_socket.send_text(data)
except Exception as e:
print(f"WebSocket error: {e}")
finally:
if websocket.application_state == WebSocketState.CONNECTING:
print("关闭websocket")
await websocket.close()
del person_name_to_socket[name]
print("websocket已经关闭", name)
+2
View File
@@ -18,6 +18,7 @@ from app.controller.add_redis_route import add_redis_route
from app.controller.add_reimburse_route import add_reimburse_route
from app.controller.add_sqlmodel_route import add_sqlmodel_route
from app.controller.add_user_route import add_user_route
from app.controller.add_websocket_route import add_websocket_route
from app.controller.custom_chat_playground import add_custom_chat_playground_route
from app.controller.custom_stream_api import add_custom_stream_api_route
from app.controller.test_connection import add_test_connection_route
@@ -78,6 +79,7 @@ add_knowledge_route(app)
add_api_route(app)
add_redis_route(app)
add_general_route(app)
add_websocket_route(app)
@app.get("/get_env")