python - ZeroMQ 中的锁定主题

标签 python c++ zeromq

是否可以在 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/

相关文章:

c# - ZeroMQ C# 客户端未接收到 C++ 服务器发布/订阅版本 3.2

c++ - ZMQ经销商-路由器-经销商模式

python - 如何计算 QTreeWidget 内容的高度?

c++ - 特殊订购的独特 STL 容器

python - JavaScript 的 String.fromCharCode 有 Python 版本吗?

c++ - 同时重写和重载 C++ 类中的方法

c++ - Tizen Construct() Button 方法失败

node.js - NodeJS中接收ZMQ视频流

python - 有没有比 groupby 变换更快的替代方案?

python - 列表中元素的更简洁赋值(Python)?