Flask SocketIO 如何设置生产服务器?

Flask SocketIO How To Setup Production Server?

我目前有一个项目使用 Flask-SocketIO 作为后端和一个单独的客户端与 Flask-SocketIO 服务器交互。当我 运行 本地计算机上的服务器时,一切正常。但是,当我 运行 通过 SSH 在远程服务器上的 Flask-SocketIO 服务器并尝试连接到主机 IP 地址时,连接似乎不起作用。

flask-socketio 服务器在远程服务器机器上似乎 运行 正常,因为我可以看到打印到控制台的东西(运行使用 tensorflow 的一些机器学习模型),但我只是似乎无法从客户端连接到它。

所以我的主要问题是:

  1. 我无法远程连接到服务器的原因是什么?

  2. 如何使用 nginx 设置负载平衡?我已经查看了文档 (https://flask-socketio.readthedocs.io/en/latest/#deployment),但我仍然不确定从哪里开始。

目前项目配置为使用默认服务器,使用

if __name__ == '__main__':
    socketio.run(app, port=5000)

我使用

连接到它
const socket = io('http://[ip address]:5000');

当我这样做时它会起作用

const socket = io('http://localhost:5000');

我的服务器托管在 DigitalOcean 运行ning Ubuntu

如有任何帮助,我们将不胜感激!

在生产中,建议使用适当的应用程序 server/reverse 代理组合,如文档中所述的 Gunicorn 或 uWSGI,但要回答您的问题,您应该传递 host 参数到 .run() 方法,因为它默认为 127.0.0.1:

https://flask-socketio.readthedocs.io/en/latest/#flask_socketio.SocketIO.run

host – The hostname or IP address for the server to listen on. Defaults to 127.0.0.1.

这意味着它只会监听本地环回接口而不是互联网接口。您应该将其更改为 VPS 的 public IP 地址,或更改为 0.0.0.0 以侦听所有接口。例如:

socketio.run(app, host='0.0.0.0', port=5000)