使用 pubsub 的 Flask-SocketIO 消息队列?

问题描述

超级新程序员来了!今年刚刚学习它以支持一些表演(戏剧行业必须转向!)。我一直很感激关于在 Stack Overflow 上实现 Flask-SocketIO 的资源和讨论;这真的很有帮助。

我使用 Flask-SocketIO 构建了一个 Web 应用程序,用于提供简单的聊天和实时投票功能,并通过 Eventlet 部署到 Heroku。在我在我的 JS 端代码中强制应用程序进入 websocket 连接之后,它大部分时间都在工作:

var socket = io.connect(location.protocol + '//' + location.host,{transports: ['websocket']});

当我对用户进行一些测试时,出现了一个奇怪的问题,就好像一些用户连接到一个房间而另一些连接到另一个房间,因为他们可以看到彼此的消息,但看不到其他人的消息。但实际上我没有在我的代码中实现任何命名空间;我希望广播所有套接字消息,以便每个人都可以看到所有内容。这很重要,因为我还有一个管理面板页面,主持人可以在其中清除聊天并触发投票,这些操作旨在实时向首页上的所有连接用户广播。

由于我对这一切如何运作的了解非常有限,我怀疑这些用户可能连接到不同的 Heroku 服务器,因此连接到不同的 socketio 服务器?我在某处读到在这种情况下应该实现 Redis 的 PubSub 功能,并且 Flask-SocketIO 具有 message_queue 参数。 flask_socketio message_queue 是否实现了PubSub 工作流程 还是我还是要自己在代码中写出来?

我正在使用 Heroku Redis 服务,它会在我的 env var 中自动给我一个 REdis_URL。我在服务器端代码添加 Redis 和 message_queue 的唯一内容是:

import redis
...
socketio = SocketIO(app,message_queue=os.environ.get('REdis_URL'))

...从那以后就没有出现错误了。 还有什么我需要做的吗?我需要在我的服务器端代码添加什么吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)