Flask-SocketIO 未使用 Gevent/Gevent-websocket

2024-05-08

我正在使用 Flask 和 Flask-SocketIO 构建用于 websocket 通信的 Web 界面/数据 API。我想开始转向使用 Gevent/Gevent-websocket、Gunicorn 以及最终使用 Nginx 进行负载平衡的更适合开发的设置。但是,安装 Gevent 和 Gevent-websocket 后,启动 SocketIO 服务器时仍然收到警告消息:

WebSocket transport not available. Install eventlet or gevent and gevent-websocket for improved performance.

根据 Flask-SocketIO 文档,

当应用程序处于调试模式时,Werkzeug 开发服务器仍然在 socketio.run() 内使用并正确配置。在生产模式下,如果可用,则使用 eventlet Web 服务器,否则使用 gevent Web 服务器。如果未安装 eventlet 和 gevent,则使用 Werkzeug 开发 Web 服务器。

这意味着 Gevent 的使用应该作为 Flask-SocketIO 的一部分在幕后自动化。我使用 pip list 检查了我的 Python 安装,并确认我安装了 Gevent 1.3.4 和 Gevent-websocket 0.10.1。以下是 SocketIO 服务器的初始化代码:

app.py

flaskApp = Flask(__name__)
flaskApp.config['SESSION_TYPE'] = 'filesystem'
Session(flaskApp)
socketio = SocketIO(flaskApp, async_mode='threading', manage_session=False)

def createApp():
    flaskApp.secret_key = "super secret"
    socketio.run(flaskApp, host='0.0.0.0', port=80)

start.py

app.register_blueprint(monitor.blueprint)
...
createApp()

为什么 Flask-SocketIO 没有检测到我的 Gevent 安装?


您引用的文档部分指的是async_mode参数,以及默认情况下如何设置。您正在设置async_mode='threading',这样就禁用了异步模式的自动选择。删除该参数,然后您将获得 eventlet 或 gevent,具体取决于您安装的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flask-SocketIO 未使用 Gevent/Gevent-websocket 的相关文章