You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
2.8 KiB

#!/usr/bin/env python3
"""
测试WebSocket连接速度
"""
import asyncio
import sys
import os
import time
import aiohttp
import json
# 添加项目根目录到Python路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from app.core.app.factory import create_development_app
from app.utils.structured_log import get_structured_logger, LogLevel
import uvicorn
logger = get_structured_logger(__name__, LogLevel.INFO)
async def test_websocket_connection_speed():
"""测试WebSocket连接速度"""
try:
logger.info("开始测试WebSocket连接速度")
# 创建应用
app = create_development_app()
logger.info("应用创建成功")
# 启动服务器
config = uvicorn.Config(
app=app,
host="127.0.0.1",
port=8000,
log_level="warning" # 减少日志输出
)
server = uvicorn.Server(config)
# 在后台启动服务器
server_task = asyncio.create_task(server.serve())
# 等待服务器启动
await asyncio.sleep(2)
# 测试连接速度
async with aiohttp.ClientSession() as session:
# 测试创建WebSocket客户端
start_time = time.time()
url = "http://127.0.0.1:8000/api/v1/websocket/clients"
data = {
"name": "test_client",
"url": "ws://localhost:8080/ws",
"heartbeat_interval": 60
}
async with session.post(url, json=data) as response:
end_time = time.time()
response_time = end_time - start_time
if response.status == 200:
result = await response.json()
logger.info(f"WebSocket客户端创建成功,响应时间: {response_time:.3f}")
logger.info(f"响应内容: {result}")
else:
error_text = await response.text()
logger.error(f"WebSocket客户端创建失败,状态码: {response.status}")
logger.error(f"错误信息: {error_text}")
return False
# 停止服务器
server.should_exit = True
await server_task
logger.info("WebSocket连接速度测试完成")
return True
except Exception as e:
logger.error(f"WebSocket连接速度测试失败: {e}")
import traceback
logger.error(f"异常堆栈: {traceback.format_exc()}")
return False
if __name__ == "__main__":
success = asyncio.run(test_websocket_connection_speed())
if success:
print("✅ WebSocket连接速度测试成功")
sys.exit(0)
else:
print("❌ WebSocket连接速度测试失败")
sys.exit(1)