BodyBalanceEvaluation/backend/test_socketio_debug.py

117 lines
3.3 KiB
Python
Raw Normal View History

2025-08-13 14:17:50 +08:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
测试SocketIO异步模式问题的诊断脚本
"""
import sys
import os
# 添加当前目录到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
print("=== SocketIO 异步模式诊断 ===")
print(f"Python版本: {sys.version}")
print(f"工作目录: {os.getcwd()}")
print()
# 检查可用的异步模式
print("检查可用的异步驱动模块:")
# 检查 threading
try:
import threading
print("✓ threading 模块可用")
except ImportError as e:
print(f"✗ threading 模块不可用: {e}")
# 检查 eventlet
try:
import eventlet
print("✓ eventlet 模块可用")
except ImportError as e:
print(f"✗ eventlet 模块不可用: {e}")
# 检查 gevent
try:
import gevent
print("✓ gevent 模块可用")
except ImportError as e:
print(f"✗ gevent 模块不可用: {e}")
print()
print("检查 engineio 异步驱动:")
# 检查 engineio.async_drivers.threading
try:
import engineio.async_drivers.threading
print("✓ engineio.async_drivers.threading 可用")
except ImportError as e:
print(f"✗ engineio.async_drivers.threading 不可用: {e}")
# 检查 engineio.async_drivers.eventlet
try:
import engineio.async_drivers.eventlet
print("✓ engineio.async_drivers.eventlet 可用")
except ImportError as e:
print(f"✗ engineio.async_drivers.eventlet 不可用: {e}")
# 检查 engineio.async_eventlet
try:
import engineio.async_eventlet
print("✓ engineio.async_eventlet 可用")
except ImportError as e:
print(f"✗ engineio.async_eventlet 不可用: {e}")
# 检查 engineio.async_threading
try:
import engineio.async_threading
print("✓ engineio.async_threading 可用")
except ImportError as e:
print(f"✗ engineio.async_threading 不可用: {e}")
print()
print("测试 SocketIO 初始化:")
try:
from flask import Flask
from flask_socketio import SocketIO
app = Flask(__name__)
app.config['SECRET_KEY'] = 'test-key'
# 测试不指定 async_mode
print("测试 SocketIO() 不指定 async_mode...")
try:
socketio = SocketIO(app, cors_allowed_origins='*')
print(f"✓ SocketIO 初始化成功,自动选择的异步模式: {socketio.async_mode}")
except Exception as e:
print(f"✗ SocketIO 初始化失败: {e}")
# 测试指定 threading
print("测试 SocketIO(async_mode='threading')...")
try:
app2 = Flask(__name__)
app2.config['SECRET_KEY'] = 'test-key-2'
socketio2 = SocketIO(app2, cors_allowed_origins='*', async_mode='threading')
print(f"✓ SocketIO threading 模式初始化成功")
except Exception as e:
print(f"✗ SocketIO threading 模式初始化失败: {e}")
# 测试指定 eventlet
print("测试 SocketIO(async_mode='eventlet')...")
try:
app3 = Flask(__name__)
app3.config['SECRET_KEY'] = 'test-key-3'
socketio3 = SocketIO(app3, cors_allowed_origins='*', async_mode='eventlet')
print(f"✓ SocketIO eventlet 模式初始化成功")
except Exception as e:
print(f"✗ SocketIO eventlet 模式初始化失败: {e}")
except Exception as e:
print(f"✗ Flask/SocketIO 导入失败: {e}")
print()
print("=== 诊断完成 ===")
print("按回车键退出...")
input()