从 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 秒超时后失败的主要内容,如果未能解决你的问题,请参考以下文章

在 Heroku 上使用 Django 将大文件上传到 AWS S3 存储桶而没有 30 秒的请求超时

从 WebClient 流式传输到 Flux。阻塞超时抛出异常

具有不同长度的音频文件的 HTTP 实时流式传输

超时不适用于Rails应用程序的heroku

在 ASP.NET 中流式传输大文件上传

在 Swift 3 中从服务器流式传输 mp3 文件