ZeroMQ:如何发布到除其中一个之外的多个接收者

ZeroMQ: How to publish to a number of receivers except for one of them

我有 N 个发布者订阅者。该消息是一个简单的布尔值。消息传递模式与常规 PUB/SUB 略有不同:

所以我很乐意向除了一个订阅者之外的所有人发布一个false。这个特殊的订阅者不是固定的,而是用户选择的。

我现在的一个想法是 PUB/SUB 一个 false 给所有人,然后发送一个 true 给特殊的订阅者PUSH/PULLPAIR/PAIR 模式。但这感觉像是黑客攻击。

是否有基于 PUB/SUB 模式而不是通过 1 对 1 模式循环的简单解决方案?

Q : "Will there be an easy solution based on PUB/SUB pattern instead of looping through a 1-to-1 pattern?"

当然会有。

使用XPUB/XSUB原型。每个 XSUB 都以发送它的“订阅”消息开始,UUID#-哈希或类似的。

XPUB,因为它.recv()-s XSUB-s" subscription"-message,注册一个新的 peer,它是 UUID#-hash 并且在某些情况下,当它确实想要发送一些消息给这个 peer 而不是现在,它简单地 .send()-s 这样的消息,已经将 UUID#-hash 作为它的二进制前缀(即在实际消息的前面加上 "on the left" 一侧,正如您从PUB/SUB ),因为这是主题过滤的工作方式。

很简单。
太酷了...

根本不使用主题过滤器。对于您想要实现的目标,它还不够复杂。所以你必须让应用程序完成过滤。

因此,如果 PUB 发送包含单个数字的消息,例如'3',只要作为#3 的 SUB 节点知道自己的身份,它就会收到消息 '3' 并将其接受为 "true" 为自己准备的。

与此同时,所有其他 SUB 节点也收到消息“3”,但知道它们不是#3,因此将其解释为他们自己的错误。

如果客户端 PUB 节点无法知道自己的身份,您可能会遇到麻烦。但是使用 运行 时间配置解决这个问题听起来相当容易。另一种方法是使用 XPUB/XSUB,并使用从 XSUB 到 XPUB 的订阅消息作为客户端 "announce itself" 到 PUB 的一种方式,但随后立即撤消它以恢复到空白主题(所以以接收每条 XPUB 消息)。