gpt4 book ai didi

python - Heroku 截断 HTTP 响应?

转载 作者:IT老高 更新时间:2023-10-28 12:43:10 27 4
gpt4 key购买 nike

我正在 Heroku Cedar 测功机上运行 Flask/Gunicorn Python 应用程序。应用返回 JSON 响应 给它的客户端(它实际上是一个 API 服务器)。

客户端偶尔会收到 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“响应”对象)。

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 的错误吗?

最佳答案

我知道我在这里可能会被认为有点不合时宜,但还有另一种选择。

我们知道在运输过程中不时会发生错误。我们知道目前我们无能为力来阻止该问题。如果您只提供 API,请停止阅读,但如果您也编写客户端,请继续。

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

我会建议(尽管你觉得我也是那种会想到这一点的开发人员)计算请求并设置一个合理的值来响应用户的“网络错误”。我的直觉是立即重试,然后再等一会儿再重试。

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

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

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

关于python - Heroku 截断 HTTP 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15411498/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com