如何使用 ZeroMQ 制作 'shared volatile variable'?

How to make a 'shared volatile variable' with ZeroMQ?

我正在使用 ZeroMQ。

我希望节点 B 订阅节点 A。节点 A 将发送(PUB?)一些“volatile 变量”的值(例如,某个物体的位置)。 'Volatile' 在这种情况下意味着节点 B 只关心最近的值。

结果应该是 A 可以向订阅者发送值,但是如果变量的两个值曾经在传出(或传入)队列中排队,那么最新的值将替换较早的值。另一个结果是:没有高水位线。

显然,我可以使用 PUB/SUB 来实现这一点,但这不会像最近的价值总是获胜那样。似乎有一些既定的模式可以实现这一点,但我还没有找到它。

(我想这意味着我希望 ZeroMQ 套接字模式像纯 udp 一样工作)

Q : How to make a 'shared volatile variable' ( s.t. most-recent-value-always-wins ) with ZeroMQ?

如果您的应用程序级逻辑对 PUB/SUB 满意 - 一个 PUB-lishes ,通过 .send()-ing 消息,其他人 SUB-scribe 到他们各自的主题选择,以便开始 .recv()-ing 可扩展Formal Communications Pattern 原型,我们可能会微调配置以满足您的所有要求,如上文所述 ( s.t.most-recent-value-always-胜 )

如果你从未使用过 ZeroMQ,
在深入了解更多细节之前,您可能会喜欢先看看 "ZeroMQ "



正确的配置步骤:

诀窍是使用 .setsockopt( ZMQ_CONFLATE, 1 ) 方法来处理 "switch-ON" 这种由 Context()-引擎实例管理的行为(s) 默默地告诉用户,正确的 "inside" 队列管理器的策略。

If set, a socket shall keep only one message in its inbound/outbound queue, this message being the last message received/the last message to be sent. Ignores ZMQ_RCVHWM and ZMQ_SNDHWM options. Does not support multi-part messages, in particular, only one part of it is kept in the socket internal queue.

Applicable socket types ZMQ_PULL, ZMQ_PUSH, ZMQ_SUB, ZMQ_PUB, ZMQ_DEALER


就是这么简单!

祝你掌握零之禅的艺术。