如何将带有 socketio 的 flask 部署到 heroku 并将其升级到 websockets

How to deploy flask with socketio to heroku and have it upgrade to websockets

本地有效。 Socketio 升级到 websocket 而不是诉诸轮询。

从日志中可以明显看出这一点:

...
FYnWEW0ufWGO7ExdAAAA: Received request to upgrade to websocket
FYnWEW0ufWGO7ExdAAAA: Upgrade to websocket successful
...

部署应用程序后,当我创建 procfile 内容时,它 部分工作

web: gunicorn app:app

这里的问题是 socketio 无法升级到 websocket,因此求助于轮询。

Here is a gif showcasing that it in production doesn't upgrade to websockets and resorts to spamming pollings instead


我的文件结构是

wsgi.py
app.py
Procfile
requirements.txt

这就是我初始化 socketio 的方式

app = ...
socketio = SocketIO(app,
    logger=True,
    engineio_logger=True,
    cors_allowed_origins="*"
)
if __name__ == "__main__":
    socketio.run(app, debug=False, port=5000)

注意我没有设置 async_mode


如何将带有 socketio 的 flask 应用程序部署到 Heroku 并将其升级到 websockets?

我认为问题在于我没有使用正确的 procfile 命令在部署中启动应用程序。

有一个包含内容的 procfile

web: gunicorn --worker-class eventlet -w 1 wsgi:app

完成任务。


此外,将测功机设置为“开启”也很重要