【问题标题】:Flask SocketIO How To Setup Production Server? [duplicate]Flask SocketIO 如何设置生产服务器? [复制]
【发布时间】:2018-12-11 23:47:41
【问题描述】:

我目前有一个项目,它使用 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');

我的服务器由运行 Ubuntu 的 DigitalOcean 托管

任何帮助将不胜感激!

【问题讨论】:

    标签: python flask server flask-socketio


    【解决方案1】:

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

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

    host – 要监听的服务器的主机名或 IP 地址。默认为 127.0.0.1。

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

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

    【讨论】:

    • 看起来服务器使用此命令与 gunicorn 一起工作:gunicorn --bind 0.0.0.0:5000 --worker-class eventlet -w 1 wsgi:app 我有一个名为 wsgi.py 的文件,其中只包含 from app import app if __name__ == "__main__": app.run() 现在只需要使用 nginx 配置负载平衡
    猜你喜欢
    • 2021-08-31
    • 1970-01-01
    • 2018-01-19
    • 2023-03-25
    • 1970-01-01
    • 2013-04-02
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多