Flask-SocketIO异步服务的选择
Flask-SocketIO模块所依赖的异步服务有3个选择
- eventlet是性能最好的选项,并支持长轮询和WebSocket传输
- gevent支持许多不同的配置。gevent支持长轮询,但不像eventlet,gevent并没有原生支持WebSocket。为了能支持WebSocket,有两种方案:一、安装 gevent-websocket 的方式使其支持WebSocket;二、通过uWSGI 实现WebSocket功能。性能方面,gevent表现不错,但比eventlet略低。
- Flask自带的Werkzeug开发服务器也能使用,但相比来说,性能很差,所以建议只用于开发测试。这个方案仅支持长轮询传输。
gunicorn+eventlet方式实现websocket
启动命令:
gunicorn -k eventlet -w1 -b0.0.0.0:9001 manage:app
nginx配置
在nginx配置文件中增加以下内容
location /socket.io {
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_pass http://127.0.0.1:9001/socket.io;
}
若不按该方式配置,测试表现为长轮询
其他方式
- flask默认方式,测试表现为长轮询
- gevent方式,测试表现为长轮询
- gevent+gevent-websocket方式时,测试表现为长轮询,并且在浏览器的控制台会出现报错,原因可能是gevent-websocket不支持python3
- uWSGI+gevent方式未测试
参考文章
https://flask-socketio.readthedocs.io/en/latest/
https://www.jianshu.com/p/8825536984eb
https://www.jianshu.com/p/be4b23ea0ba5