【问题标题】:Flask socket.io gunicorn chat app stuck in redirect loopFlask socket.io gunicorn 聊天应用程序卡在重定向循环中
【发布时间】:2019-02-20 19:34:41
【问题描述】:

我有一个基本的烧瓶 socket.io 聊天应用程序,它的构建与此示例相同 https://github.com/miguelgrinberg/Flask-SocketIO-Chat

我可以使用gunicorn mychat:app --worker-class eventlet -w 1 --bind 0.0.0.0:5000 --reloadautossh -M 0 -R myappname:80:localhost:5000 serveo.net 运行该应用程序并点击相应的serveo.net url。

我正在尝试将其部署在使用 HTTPS 的负载均衡器后面的 AWS EC2 实例上。在 EC2 实例上,我在这里安装了 nginx:https://flask-socketio.readthedocs.io/en/latest/#using-nginx-as-a-websocket-reverse-proxy(单个示例,而不是多节点示例)。

当我转到我从负载均衡器目标组定义的 URL 并进入聊天室时,我看到在浏览器的“网络”选项卡中,有大量快速轮询请求不断给出 200 和 301。如果我在另一个选项卡中加入聊天室,用户将无法互相发送消息。

我的配置有什么问题?

【问题讨论】:

    标签: flask https socket.io gunicorn


    【解决方案1】:

    经过一番挖掘,我想通了。我的主机 example.com 指向具有一堆侦听器规则的负载均衡器。我这样做是为了如果 path=/mychatapp/*,然后转发到运行应用程序的 ec2 实例。这很好,但是 socket.io 正在使用 host=example.com 进行调用,所以它正在访问 example.com/socket.io/etcetc... 如果 path=/socket.io/*,我添加了另一个负载均衡器侦听器规则,然后也将其转发到 ec2 实例。这行得通。

    这个解决方案非常老套,因为这意味着我无法运行第二个 socket.io 应用程序。更好的答案是以某种方式将默认调用从“/socket.io”更改为“/mychatapp/socket.io”,这样我就不需要另一个监听器规则。我尝试了几种方法来做到这一点,但没有奏效。由于这是一个小项目,我会坚持这个解决方案。

    【讨论】:

      猜你喜欢
      • 2020-11-14
      • 2014-08-13
      • 1970-01-01
      • 2018-09-15
      • 2016-05-10
      • 2016-12-20
      • 1970-01-01
      • 2014-09-03
      • 2016-09-08
      相关资源
      最近更新 更多