flask-socketio配置websocket步骤

Flask-SocketIO异步服务的选择

Flask-SocketIO模块所依赖的异步服务有3个选择

  1. eventlet是性能最好的选项,并支持长轮询和WebSocket传输
  2. gevent支持许多不同的配置。gevent支持长轮询,但不像eventlet,gevent并没有原生支持WebSocket。为了能支持WebSocket,有两种方案:一、安装 gevent-websocket 的方式使其支持WebSocket;二、通过uWSGI 实现WebSocket功能。性能方面,gevent表现不错,但比eventlet略低。
  3. 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;
}

若不按该方式配置,测试表现为长轮询

其他方式

  1. flask默认方式,测试表现为长轮询
  2. gevent方式,测试表现为长轮询
  3. gevent+gevent-websocket方式时,测试表现为长轮询,并且在浏览器的控制台会出现报错,原因可能是gevent-websocket不支持python3
  4. uWSGI+gevent方式未测试

参考文章

https://flask-socketio.readthedocs.io/en/latest/

https://www.jianshu.com/p/8825536984eb

https://www.jianshu.com/p/be4b23ea0ba5

猜你喜欢

转载自blog.csdn.net/xingjingb/article/details/103330815