首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一个socketio客户端可以连接到python-socketio中支持的消息代理?

是否有一个socketio客户端可以连接到python-socketio中支持的消息代理?
EN

Stack Overflow用户
提问于 2020-03-29 09:19:58
回答 1查看 388关注 0票数 1

我想我正在寻找一个全是python的socketio模块。然后,当我开始在socketio中使用message broker时,文档使用redis进行了很好的演示。然而,我发现奇怪的是,python-socketio客户机没有显示如何连接到消息代理。这就是你的意图,并把它留给项目的追随者吗?

我只能依靠python redis来查看python-socketio是如何连接到redis的,前提是给出了带有地址的db。此外,我发现socket.io是所有内容的默认通道,它发出的信息比我预期的要多。

期望:{'foo':'bar'}

观察:{'method':'emit','event':'event','data':{'foo':'bar'},'namespace':'/learning_it','room':无,'skip_sid':无,'callback':无,'host_id':''}

从模块使用的角度来看,我们是否可以随心所欲地操作?

谢谢米格尔·格林伯格,来自粉丝。

EN

回答 1

Stack Overflow用户

发布于 2020-03-29 23:35:27

您误解了消息队列的角色。

让我们暂时忘掉队列。我们有一个或多个客户端,但只有一个服务器。客户端通过长轮询或websocket连接到服务器。我想这一切都很清楚了。

代码语言:javascript
复制
client1 ---+
           |
client2 ---+--- server
           |
client3 ---+

现在假设你想扩展你的服务器,因为你有太多的客户端,太多了,以至于你的单个服务器不能处理所有的客户端。

解决方案是运行多个服务器,所有服务器都在负载均衡器后面:

代码语言:javascript
复制
client1 ---+                     +--- server1
           |                     |
client2 ---+--- load balancer ---+
           |                     |
client3 ---+                     +--- server2

到目前一切尚好?这种解决方案的问题是,每个服务器只知道客户端的一个子集,因此无法向所有客户端广播事件。甚至不可能将事件发送到房间,因为该房间的参与者可能会被随机分配到不同的服务器。

那么我是如何解决这个问题的呢?我添加了一个消息队列,所有服务器都使用它来协调广播:

代码语言:javascript
复制
client1 ---+                     +--- server1 ---+
           |                     |               |
client2 ---+--- load balancer ---+               +--- pub/sub queue
           |                     |               |
client3 ---+                     +--- server2 ---+

使用这种设计,服务器可以通过将事件发送到它所知道的客户机子集来发布广播,然后通过在队列上发布请求来请求其他服务器执行相同的操作。

您在Redis服务器上看到的有效负载是内部负载,应该由作为集群一部分的服务器使用。该队列与客户端没有直接联系。

希望这能有所帮助!

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60909094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档