【发布时间】:2025-12-22 11:00:11
【问题描述】:
我在 heroku 上托管了一个 flask-socketio 应用程序,带有以下 Procfile:
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 错误代码描述,上面写着“后端套接字,属于您的应用程序的 Web 进程,在后端返回 HTTP 响应之前已关闭。”
但我不知道为什么会发生这种情况。
任何关于我应该注意什么的线索,都将帮助我进行调试。
我可以分享代码,但它有 300 行长,而且由于我不知道错误的来源,我不确定它是否会有所帮助。
【问题讨论】:
-
您在本地运行应用程序时是否遇到同样的问题(或任何其他问题)? (与独角兽)
-
不,它在本地使用 gunicorn 运行良好。
-
您可以尝试将 procfile 工人类标签更改为:
--worker-class socketio.sgunicorn.GeventSocketIOWorker。我正在关注这个here。 -
我在使用 eventlet 之前已经阅读了您的博客,因此可以避免更改为 gevent。我尝试安装 gevent 并更改 Procfile 并且 gunicorn 无法运行。仍在弄清楚哪里出了问题。
-
@wgwz 不,您的建议不适用于此。使用 gevent-socketio 时会使用
GeventSocketIOWorker类。但是 Flask-SocketIO 不使用那个包。
标签: python heroku flask flask-socketio