部署项目
我们依然可以使用 gunicorn 来部署 Flask-SocketIO 项目,另外还需要使用 eventlet 或者 gevent 来运行 Flask-SocketIO 项目。因为 eventlet 的效率比 gevent 高,并且 eventlet 也是官方推荐的方式,安装 eventlet 的命令如下。
pip install eventlet
下面创建一个 gunicorn.conf.py 文件来配置 gunicorn 的运行参数,这里简化一下,直接使用以下命令部署项目。
gunicorn --worker-class eventlet app:app
上述命令中,使用 --worker-class 来指定工作进程由 eventlet 来运行即可。
与第 9 章中论坛项目一样,我们选择 Nginx 来作为项目的 Web 服务器。Nginx 的配置与论坛项目一样,不同的是,Nginx 需要增加 JavaScript SocketIO 默认的 /socket.io 转发。Ngnix 的配置如下。
server {
listen 80;
server_name _;
location / {
include proxy_params;
proxy_pass http://127.0.0.1:5000;
}
location /static {
alias <path-to-your-application>/static;
expires 30d;
}
location /socket.io {
include proxy_params;
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:5000/socket.io;
}
}
上述配置中,除了 location/ 和 location/static 外,还增加了 location/socket.io,这个 URL 是使用 SocketIO 创建对象时默认使用的 URL。当然也可以修改为自定义的 URL,如以下配置:
const socket = io({path: "/my-socketio-path"})
在监听到 location/socket.io 后,会把请求代理给 Flask-SocketIO 项目的 location/socket.io 路径,这样即可完成 Nginx 配置。
注意,JavaScript SocketIO 的官方文档地址为 https://socketio.bootcss.com/docs/ 。Flask-SocketIO 的官方文档地址为 https://flask-socketio.readthedocs.io/en/latest/intro.html 。