Eva*_*Coy 5 python websocket gevent flask flask-socketio
我正在使用 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.
Run Code Online (Sandbox Code Playgroud)
根据 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 服务器的初始化代码:
应用程序.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)
Run Code Online (Sandbox Code Playgroud)
启动.py
app.register_blueprint(monitor.blueprint)
...
createApp()
Run Code Online (Sandbox Code Playgroud)
为什么 Flask-SocketIO 没有检测到我的 Gevent 安装?
您引用的文档部分涉及参数async_mode以及默认情况下如何设置它。您正在设置async_mode='threading',以便禁用异步模式的自动选择。删除该参数,然后您将获得 eventlet 或 gevent,具体取决于您安装的内容。