我在使用uWSGI传输大型gzip响应时遇到问题。 我的应用是在带有Python插件的uwsgi服务器后面运行Flask / gevent的Python。
我正在使用以下命令来运行服务器:
uwsgi -L --http :80 --plugin python --wsgi-file main.py --callable app --processes 4
根据特定的GET请求,服务器开始向客户端流式传输
Content-Type: application/zip
Transfer-Encoding: chunked
虽然某些请求可以正常工作,并且文件已下载到客户端,但是某些请求在客户端出现“网络错误”。在服务器上,我可以看到以下错误:
SIGPIPE: writing to a closed pipe/socket/fd
我已经尝试设置更长的超时时间,在Unix端口(而不是HTTP)上运行python桥以及其他一些调整。似乎没有什么能解决这个问题。 在下载流时,我可以看到数据总是在传输,它在任何时候都不会挂起或卡住,并且错误在没有任何数据流更改的情况下突然发生。同样,同一文件下载在不同时间会失败-100MB后可能会失败,而350MB下载后可能会在一分钟后失败。
答案 0 :(得分:0)
您真的应该考虑将websocket用于这种类型的流式传输。优点是它们易于设置,异步并且可以更好地处理网络延迟。
https://blog.miguelgrinberg.com/post/easy-websockets-with-flask-and-gevent