【发布时间】:2017-08-17 17:00:04
【问题描述】:
根据 heroku Docs,只要每 55 秒发送一次数据,它就允许长响应。
Heroku 支持 HTTP 1.1 功能,例如长轮询和流式响应。应用程序有一个初始的 30 秒窗口,用于向客户端返回一个字节。但是,此后传输的每个字节(从客户端接收或由您的应用程序发送)都会重置一个滚动的 55 秒窗口。如果在 55 秒窗口内没有发送数据,连接将被终止。
我的工作应用程序每隔几秒返回一个 StreamingHttpResponse,它在 30 秒后被终止
app[web.1]: [2017-03-24 16:26:24 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:24)
app[web.1]: [2017-03-24 16:26:24 +0000] [24] [INFO] Worker exiting (pid: 24)
heroku[router]: sock=backend at=error code=H18 desc="Server Request Interrupted" method=POST path="/createRepos" host=managegithub.herokuapp.com request_id=96d4d31e-f9ff-46c0-b727-04ca0dfae2a3 fwd="89.127.160.122" dyno=web.1 connect=6ms service=30690ms status=503 bytes= protocol=https
app[web.1]: [2017-03-24 16:26:25 +0000] [31] [INFO] Booting worker with pid: 31
为什么工作会被终止,而它每隔几秒就不断地响应数据?
【问题讨论】:
-
你的 procfile 中有 --keep-alive 吗?例如web: gunicorn info.wsgi --keep-alive 5
-
是:--keep-alive 300