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
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)
|
|
|