使用带有zmq的pub-sub的动态主题,这样会好吗?

时间:2017-04-11 14:05:29

标签: zeromq publish-subscribe pyzmq

我已经阅读了我的文档,大多数示例都是针对基本用例的。

只需一个进程发布X事件,另一个进程订阅X事件。

但在我的应用程序中,X是一种变量。所以我想说X代表我的用户。

所以我可以从一个服务器事件发布如user-ID这意味着如果我有1000个用户连接到服务器那么就可以发布和订阅这么多动态主题,然后另外20个服务器订阅这个服务器上的1000个主题。

让我们看看这个例子。

我有10台服务器。连接1000个用户的每台服务器。总共10k用户。 我需要将每个用户的X数据发送给另一个用户。

所以我做到了。

X服务器发布user-ID数据(1个发布已连接的用户,1K发布)

Y服务器订阅user-ID数据(每个服务器发送10k订阅请求)

什么应该是具有动态主题的pub sub的最佳方式,以便在服务器之间使用更少的带宽?

注意:

user-ID只是ID是动态数字的一个例子,它发布了一些无法存储在任何地方的实时数据。

2 个答案:

答案 0 :(得分:1)

据我所知,pyzmq API发布者可以向任何主题发送消息

socket.send("%d %d" % (topic, messagedata))

订阅者使用setsockopt

为这些主题设置过滤器,以了解他们感兴趣的主题
topicfilter = "10001"
socket.setsockopt(zmq.SUBSCRIBE, topicfilter)

所以我认为你可以全面实施你的计划。

答案 1 :(得分:1)

在ZeroMQ中,订阅匹配在PUB套接字中实现,前缀匹配为trie。这是一个非常有效的数据结构,我希望10K订阅和10K msg / sec都不会有任何问题。

PUB套接字仅发送匹配订阅的消息(因此没有"浪费")。如果消息与任何订阅都不匹配,则PUB套接字将丢弃它。匹配消息仅发送到已订阅它们的SUB套接字。

当您添加或删除订阅时,SUB套接字将发送一条消息,其连接的PUB套接字。然后,每个PUB套接字将更新其主题trie。

我的猜测是10k subs和10k msgs / s没问题,但最好的办法就是编写一些测试代码并试一试。关于ZeroMQ的好处是,测试不同架构的工作并不多。