我有一个使用以下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行,因为我不知道错误源自何处,我不确定它是否有用。
答案 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