我有一个发布者的N
订阅者。该消息是一个简单的布尔值。消息传递模式与常规PUB/SUB
略有不同:
- 当一个订阅者收到
true
时,所有其他订阅者都应该收到一个false
。
因此,我很想向除一个订阅者之外的所有订阅者发布false
。这个特殊的订户不是固定的,而是由用户选择的。
我现在的一个想法是向所有人PUB/SUB
false
,然后向具有PUSH/PULL
或PAIR/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
中知道的那样(,因为这是主题过滤的工作方式。
太容易了。
好爽...