Heroku sock =后端服务器请求因Flask SocketIO应用程序中断

时间:2016-01-10 16:52:43

标签: python heroku flask flask-socketio

我有一个使用以下Procfile托管在heroku上的flask-socketio应用程序:

web: gunicorn --worker-class eventlet hello:app

自从我切换到socketio后,该应用程序一直表现得不一致。之前应用程序会运行一段时间,然后POST请求将开始超时。

从昨天晚上开始,我一直收到错误

sock=backend at=error code=H18 desc="Server Request Interrupted" method=GET path="/static/js/third-party/browser.js" host=deard.herokuapp.com request_id=725da6af-aa29-4293-a411-2c89977f1d4d fwd="216.165.95.0" dyno=web.1 connect=1ms service=36ms status=503 bytes=13811

我阅读了heroku错误代码说明,其中说明“在后端返回HTTP响应之前,属于您应用的Web进程的后端套接字已关闭。”

但我不知道为什么会发生这种情况。

关于我应该注意什么的任何线索,都会帮助我调试这个。

我可以共享代码,但它的长度为300行,因为我不知道错误源自何处,我不确定它是否有用。

2 个答案:

答案 0 :(得分:0)

这种"套接字流错误"当您在服务器端(烧瓶)取消或重新发送相同的请求时,Flask会引发您仍处于计算中的相同请求,以便呈现与初始请求相对应的布局。

因此,它可能与双方(服务器/客户端)的超时或网络错误处理有关。

有些问题:

请求计算在服务器端期间有多长时间? 如何在服务器端和客户端处理网络错误异常? 烧瓶或客户端是否存在超时?

也可能在前一个请求结束之前发送新请求。

请分享一些与请求处理相关的代码。

答案 1 :(得分:0)

这对我有用:

from waitress import serve
# app.run(host='0.0.0.0', port=port) # <---- REMOVE THIS
# serve your flask app with waitress, instead of running it directly.
serve(app, host='0.0.0.0', port=port) # <---- ADD THIS