ZeroMQ:如何发布到多个接收器,除了其中一个



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

  • 当一个订阅者收到true时,所有其他订阅者都应该收到一个false

因此,我很想向除一个订阅者之外的所有订阅者发布false。这个特殊的订户不是固定的,而是由用户选择的。

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

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

根本不使用主题过滤器。对于您想要实现的目标来说,它不够复杂。因此,您必须由应用程序完成过滤。

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

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

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

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

哦,当然会有。

使用XPUB/XSUB原型。每个XSUB都从发送它的">订阅"消息、UUID#哈希或类似消息开始。

XPUB,因为它.recv()-sXSUB-s ">订阅"消息,注册一个新的对等体,它是UUID#-hash 的,如果它确实想向这个对等体发送一些消息,而不是其他消息现在,它只是.send()这样的消息,将UUID#-hash 作为二进制前缀放在它的前面(即在实际消息的左侧"前面, 正如您从PUB/SUB中知道的那样(,因为这是主题过滤的工作方式。

太容易了。
好爽...

相关内容

最新更新