Heroku截断HTTP响应?

2024-10-01 11:22:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Heroku Cedar dyno上运行一个Flask/GunicornPython应用程序。应用程序将JSON responses返回给它的客户端(实际上是API server)。在

偶尔客户端会得到0字节的响应。不过,不是我还他们。以下是我的应用程序日志片段:

Mar 14 13:13:31 d.0b1adf0a-0597-4f5c-8901-dfe7cda9bce0 app[web.1] [2013-03-14 13:13:31 UTC] 10.104.41.136 apisrv - api_get_credits_balance(): session_token=[MASKED]

上面的第一行是我开始处理请求。在

Mar 14 13:13:31 d.0b1adf0a-0597-4f5c-8901-dfe7cda9bce0 app[web.1] [2013-03-14 13:13:31 UTC] 10.104.41.136 apisrv 1252148511 api_get_credits_balance(): returning [{'credits_balance': 0}]

第二行是我返回一个值(到Flask——它是一个Flask“Response”对象)。在

Mar 14 13:13:31 d.0b1adf0a-0597-4f5c-8901-dfe7cda9bce0 app[web.1] "10.104.41.136 - - [14/Mar/2013:13:13:31] "POST /get_credits_balance?session_token=MASKED HTTP/1.1" 200 22 "-" "Appcelerator Titanium/3.0.0.GA (iPhone/6.1.2; iPhone OS; en_US;)"

第三行是Gnicorn的,在这里可以看到Gunicorn得到了200个状态和22个字节的HTTP主体(“200 22”)。在

但是,客户端有0个字节。以下是Heroku路由器日志:

Mar 14 13:13:30 d.0b1adf0a-0597-4f5c-8901-dfe7cda9bce0 heroku[router] at=info method=POST path=/get_credits_balance?session_token=MASKED host=matchspot-apisrv.herokuapp.com fwd="66.87.116.128" dyno=web.1 queue=0 wait=0ms connect=1ms service=19ms status=200 bytes=0

为什么Gunicorn返回22个字节,但Heroku看到0,并且确实将0字节返回给客户机?这是Heroku虫吗?在


Tags: tokenapp应用程序客户端flaskgetheroku字节
1条回答
网友
1楼 · 发布于 2024-10-01 11:22:12

我知道我可能会被认为有点离谱,但还有另一个选择。在

我们知道时不时会有一个bug发生在过境。我们要知道,我们现在不能做很多事情来阻止这个问题。如果您只提供API,那么停止读取;但是如果您也编写客户机,请继续。在

错误是已知的情况,也是已知的原因。返回值为空的结果意味着出现了问题。但是这个值是可用的,而且是被获取的,计算的,不管怎样。。。作为开发人员,我的直觉是将空结果视为HTTP错误并请求重新发送数据。然后您可以跟踪重发请求并查看这种情况发生的频率。在

我建议(尽管我觉得你也是那种会考虑这一点的开发人员),你应该计算请求数,并为响应用户的“网络错误”设置一个合理的值。我的本能反应是马上再试一次,然后等一会儿再再试一次。在

从您描述的情况来看,第一次重试可能会正确地获取数据。当然,这可能意味着将较旧的请求保留在缓存中几分钟,或者根据最合适的方式再次运行请求。在

这也会绕过任何数量的点对点网络错误,并使应用程序在面对连接问题时更加健壮。在

我知道作为开发人员,我们的本能是修复已知的故障,但有时最好是开发一个能够在故障情况下运行的系统。也就是说,不管怎样,记录错误和问题并尝试修复它们都不会有坏处。在

相关问题 更多 >