ZMQ 订阅者过滤

ZMQ subscriber filtering

根据下面的讨论

Can ZMQ publish message to specific client by pub-sub socket?

当订阅者不提供过滤器时,似乎无法阻止订阅者接收所有消息。

有没有可能没有提供过滤器的订阅者收不到任何消息?即,如果订阅者知道确切的过滤器(没有通配符等),他只会接收消息。

主题似乎有点混乱。让我们揭开 PUB-SUB

的神秘面纱

案例 1) SUB "does not provide a filter"

顺便说一句,这是实例化后的默认初始状态

aSub_signallingChannelEND = aCentralCONTEXT.socket( zmq.SUB )

在此初始状态下,自然没有有效的订阅(预)设置,因为 Context() 是一个理性过程(不是 Norn),因此它不能先验地假设任何此类普遍有效的订阅密钥(如果可以的话,那将是非常奥威尔式的,不是吗?)以便灌输 SUB-instance 从它诞生以来就拥有它 "breathed-in"。

在原始的 ZeroMQ v2.x 中(注意,这被记录为对 ZeroMQ 库的最新版本无效)但是这种状态并不意味着SUB方没有得到物理接收任何消息。 v2.x 订阅过滤是在 SUB 端执行的(无论是否出于性能驱动的决定),因此线级 仍然可以检测到 "un-authorised" 条消息


案例 2) SUB "did provide a super-set of all filters"

短版: 原则上,PUB-side 本身没有控制来区分任何 SUB-side 决定什么订阅和取消订阅。


如何让它以给定的方式工作?

由于 PUB-SUB 消息传递模式是以这种方式定义的,因此您必须通过智能分层设置来满足超出 PUB-SUB 模式,或者可以使用其他方法来增加基于身份验证的保护(例如,为 code/decode 内容使用量身定制的 right/key 用于基于身份验证的选择性能力,以突出一些可能的方法).