#1 本地开发 flask 应用程序,里面使用了 websocket,异步模式使用得是 gevent,并在程序刚开始打了 gevent 猴子补丁,s 端主要监听 connect disconnect 两个事件用来做一些前端页面的初始化和离开动作。 启动代码:
socketio.run(app=app, host='0.0.0.0', port=5000, debug=True)
#2 正常在本地 debug 或 run 都没问题,部署到测试环境遇到问题,测试环境采用得是 Nginx+supervisor+gunicorn+flask, nginx 配置:
server {
listen 8000;
listen [::]:8000;
server_name x.x.x.x;
root /root/python/asset;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log /var/log/asset/access.log;
error_log /var/log/asset/error.log;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
supervisor 配置:
[program:xx]
directory = /root/python/xx
command = /root/.local/xxx/bin/gunicorn -b 127.0.0.1:5000 -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 module:app
user = root
autostart = true
autorestart = true
stopasgroup = true
killasgroup = true
startsecs = 5
startretries = 3
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile = /var/log/xx/stdout.log
stderr_logfile = /var/log/xx/stderr.log
其中启动 gunicorn 的命令参考自
https://stackoverflow.com/questions/38624447/websockets-proxied-by-nginx-to-gunicorn-over-https-giving-400-bad-request
https://segmentfault.com/q/1010000007495163
https://flask-socketio.readthedocs.io/en/latest/#gunicorn-web-server
gunicorn 也在 pipenv 环境下安装
#3
不使用 gunicorn 的情况下没任何问题,如图:
首先会导致 402 错误,
402 详情,
其次,会一直 pending,一直在发请求,
最后是 402 详情在控制台的信息,
请各位帮帮忙,尝试了好长时间没办法解决,感谢各位。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.