从 Heroku 流式传输大文件在 30 秒超时后失败

Posted

技术标签:

【中文标题】从 Heroku 流式传输大文件在 30 秒超时后失败【英文标题】:Streaming large file from Heroku fails after 30 seconds timeout 【发布时间】:2013-07-10 16:00:52 【问题描述】:

我有一个 python 网络工作者,可以根据客户端请求流式传输一个大文件。 30 秒后,连接被 Heroku 终止。我正在使用web.py 并产生新的输出。根据 Heroku 文档:

Cedar 支持 HTTP 1.1 功能,例如长轮询和流式响应。应用程序有一个初始的 30 秒窗口,用于向客户端返回一个字节。但是,此后传输的每个字节(从客户端接收或由您的应用程序发送)都会重置一个滚动的 55 秒窗口。如果在 55 秒窗口内没有数据发送,连接将被终止。

我每 55 秒发送超过 1 个字节,但连接仍然终止。

这些是我正在使用的标题

web.header('Content-type' , 'application/zip')
web.header('Content-Disposition', 'attachment; filename="images.zip"')

我什至尝试添加:

web.header('Transfer-Encoding','chunked')

我做错了吗?

【问题讨论】:

有这方面的消息吗?我遇到了同样的问题。 【参考方案1】:

问题似乎是由错误的gunicorn 设置造成的。在Procfile 中延长gunicron 超时就成功了:

--timeout 300

【讨论】:

这样做有什么影响?我的意思是,如果遇到攻击或错误,服务器会变得不负责任吗?

以上是关于从 Heroku 流式传输大文件在 30 秒超时后失败的主要内容,如果未能解决你的问题,请参考以下文章