flask - Flask socket.io gunicorn 聊天应用程序卡在重定向循环中
问题描述
我有一个基本的烧瓶 socket.io 聊天应用程序,它的构建与此示例相同https://github.com/miguelgrinberg/Flask-SocketIO-Chat
我可以运行应用程序,gunicorn mychat:app --worker-class eventlet -w 1 --bind 0.0.0.0:5000 --reload
然后autossh -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。如果我加入在另一个选项卡中的聊天室,用户无法相互发送消息。
我的配置有什么问题?
解决方案
挖了一圈后,我想通了。我的主机 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”,这样我就不需要另一个监听器规则。我尝试了几种方法来做到这一点,但没有奏效。由于这是一个小项目,我会坚持这个解决方案。
推荐阅读
- python - OSError: [WinError 123] 文件名、目录名或卷标语法不正确(尝试从驱动器访问图像数据集时出错)
- java - Apache flink 对 watermark 空闲的理解以及与 Bounded duration 和 window duration 的关系
- kubernetes - 自动将 Pod 移动到另一个节点
- hive - 如何在 ubuntu 上使用 java 将 jdbc 配置为 hive?
- performance - 返回范围 [a,b] 中所有素数的计数,使得所有数字都来自集合 {1,5,9} 。1<=a<=b<=10⁹
- python - 在数据框中添加除某个字符串之外的值
- python - 将行值与 id 部分中的 nan 组合(熊猫)
- javascript - NodeJS 调度(启动/停止)多个任务
- formula - catia 公式中的规则编辑器语法错误
- android - 如何从 Android Studio 中的本地库中排除依赖项