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