Gevent/Gevent-websocket Flask-SocketIO 未使用

Gevent/Gevent-websocket not being used by Flask-SocketIO

我正在构建一个网络 interface/data API 使用 Flask 和 Flask-SocketIO 进行 websocket 通信。我想开始转向更适合开发的设置,使用 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 文档,

When the application is in debug mode the Werkzeug development server is still used and configured properly inside socketio.run(). In production mode the eventlet web server is used if available, else the gevent web server is used. If eventlet and gevent are not installed, the Werkzeug development web server is used.

这意味着 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,这取决于你安装了什么。