我已经阅读了我的文档,大多数示例都是针对基本用例的。
只需一个进程发布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是动态数字的一个例子,它发布了一些无法存储在任何地方的实时数据。
答案 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的好处是,测试不同架构的工作并不多。