繁体   English   中英

ZeroMQ 中的锁定主题

[英]Latched topic in ZeroMQ

是否有可能在 ZeroMQ 中有一个“锁定”主题,以便向新加入的订阅者重复发送到该主题的最后一条消息?

目前,除了PUB-SUB对之外,我还必须创建一个REQ-REP套接字对,以便当新SUB加入时,它使用REQ套接字请求最后一条消息。 但是这项额外的工作,都是样板文件,是非常不受欢迎的。

ROS有“闩锁”选项,它被描述为:

当连接被锁定时,最后发布的消息将被保存并自动发送给任何未来连接的订阅者。 这对于缓慢更改为静态数据(如地图)非常有用。 请注意,如果同一主题上有多个发布者,在同一节点中实例化,那么只会发送来自该节点的最后发布的消息,而不是来自每个发布者在该单个主题上的最后发布的消息。

好吧,你的想法在 ZeroMQ 中是可行的:

鉴于历史上的一些细节,由于分布式计算性能和内存容量的原因以及较低的流量成本,主题过滤器最初是在SUB端实现的,而后来的版本开始在PUB端。

因此,您的应用程序永远不会提前知道哪些客户端将使用哪个版本的 ZeroMQ 并且问题主要是不可判定的。

说了这么多,
您的应用程序用户代码,在PUB端,可以解决这个问题,发送二合一格式的消息,并且您的SUB端可以知道这个嵌入到消息流中的软逻辑。

只需在您的用户代码中实现“锁定”逻辑,无论是通过简单地重新发送每个主题行的每条消息还是其他方式。


是的,只有用户代码才能处理这个问题,

不是PUB/SUB可扩展的正式通信模式原型——有两个原因——它不是任何通用的、普遍适用的行为,而是用户特定的专业——加上——主题过滤器(无论是PUB端还是SUB操作)没有关于词法分支的先验知识(订阅是从左到右词法解释的,没有人可以先验地说下一个订阅者实际订阅什么,因此“锁定”-最后- 消息存储将无法预填充,直到新的“下一个”订阅者实际加入并设置其实际的主题过滤器订阅(存储所有确定性的、组合驱动的、可能的 {sub-|super-}-topic 选项是一个规避主要不可判定性的想法非常糟糕,不是吗?))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM