如何将flask-ngrok与flask-socketio配合使用?常规尝试无效求助
解决方案:Flask-SocketIO 配合 Flask-Ngrok 使用
要让两者正常配合运行,核心是避免同时启动两个冲突的服务器,以下是可行的实现步骤:
1. 安装依赖
确保安装所有必要的包:
pip install flask flask-socketio flask-ngrok eventlet
2. 正确的代码实现
不要分开调用 socketio.run() 和 run_with_ngrok(),而是让 Flask-Ngrok 包装应用后,由 Flask-SocketIO 启动兼容的异步服务器:
from flask import Flask from flask_socketio import SocketIO from flask_ngrok import run_with_ngrok # 初始化 Flask 应用 app = Flask(__name__) app.config['SECRET_KEY'] = 'your-secret-key-here' # 替换为实际密钥 # 初始化 SocketIO,允许跨域(根据需求调整) socketio = SocketIO(app, cors_allowed_origins="*") # 示例 SocketIO 事件 @socketio.on('connect') def handle_client_connect(): print('客户端已连接') @socketio.on('message') def handle_client_message(data): print(f'收到消息: {data}') socketio.emit('response', f'已收到消息: {data}') # 用 Flask-Ngrok 包装应用 run_with_ngrok(app) # 启动 SocketIO 服务器,关闭自动重载避免 Ngrok 重复启动 socketio.run(app, host='0.0.0.0', use_reloader=False, debug=False)
关键说明
- 原代码错误在于同时启动了两个独立服务器:Flask-SocketIO 的异步服务器和 Flask-Ngrok 启动的 Flask 开发服务器,导致端口冲突。
- 必须关闭
use_reloader=False:自动重载会触发两次 Ngrok 隧道创建,导致连接异常。 - 使用
eventlet作为异步服务器:Flask-SocketIO 默认依赖 eventlet,确保 WebSocket 连接正常工作。
内容的提问来源于stack exchange,提问作者Dany
相关产品推荐
相关产品推荐

