You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 18:39:57