是否可以在 ZeroMQ 中有一个“锁定”主题,这样发送到该主题的最后一条消息会重复发送给新加入的订阅者?
目前,除了 PUB-SUB
对,这样当新的 SUB
加入时,它会使用 REQ
请求最后一条消息 - socket 。但是,这种额外的工作(全是样板文件)是非常不受欢迎的。
ROS
具有“锁定”选项,它被描述为:
When a connection is latched, the last message published is saved and automatically sent to any future subscribers that connect. This is useful for slow-changing to static data like a map. Note that if there are multiple publishers on the same topic, instantiated in the same node, then only the last published message from that node will be sent, as opposed to the last published message from each publisher on that single topic.
最佳答案
好吧,你的想法在 ZeroMQ 中是可行的:
根据历史记录,由于分布式计算性能和内存容量的原因以及低流量成本,主题过滤器最初是在 SUB
端实现的, 而后来的版本开始在 PUB
端运行此功能。
因此,您的应用程序永远不会事先知道哪些客户端将使用哪个版本的 ZeroMQ,并且问题基本上是不可判定的。
话虽如此,
您的应用程序用户代码,在 PUB
端,可以解决这个问题,发送二合一格式的消息,并且您的 SUB
端可以意识到这一点嵌入到消息流中的软逻辑。
只需在您的用户代码中实现“锁定”逻辑,无论是通过按主题行或其他方式简单地重新发送每条消息。
是的,只有用户代码才能处理这个,
不是 PUB/SUB
可扩展的正式通信模式原型(prototype)——出于两个原因——它不是任何一般的、普遍适用的行为,而是特定于用户的专业——加上——主题——过滤器(无论是 PUB
-side 还是 SUB
-side operated)没有关于词法分支的先验知识(订阅是从左到右的词法解释,没有人可以先验地说,下一个订阅者实际订阅什么,因此在新的“下一个”订阅者实际加入并设置其实际主题过滤器之前,“锁定”-last-message 存储将无法预填充订阅(存储所有确定性的、组合学驱动的、可能的{sub-|super-}-topic 选项对于规避主要的不确定性来说是一个非常糟糕的主意,不是吗?))
关于python - ZeroMQ 中的锁定主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46661899/