Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ZeroMQ中的锁定主题_Python_C++_Zeromq - Fatal编程技术网

Python ZeroMQ中的锁定主题

Python ZeroMQ中的锁定主题,python,c++,zeromq,Python,C++,Zeromq,ZeroMQ中是否可能有一个“锁定”的主题,这样发送到该主题的最后一条消息会重复发送给新加入的订阅者 目前,除了PUB-SUB对之外,我还必须创建一个REQ-REP套接字对,这样当新的

ZeroMQ中是否可能有一个“锁定”的主题,这样发送到该主题的最后一条消息会重复发送给新加入的订阅者

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

具有“锁定”选项,描述如下:

当连接被锁定时,最后发布的消息将被保存并保存 自动发送到任何未来连接的订户。这是 用于缓慢更改为静态数据(如地图)。注意,如果有 同一主题上的多个发布者是否在同一主题中实例化 节点,则只有来自该节点的最后发布的消息将被删除 已发送,而不是上的每个发布者上次发布的邮件 这是一个单一的话题

您的想法在ZeroMQ中是可行的: 从历史上看,由于分布式计算性能和内存容量的原因以及较低的通信成本,主题过滤器最初在
端实现,而后来的版本开始在
PUB
端运行此功能

所以,您的应用程序永远不会预先知道哪些客户端将使用哪个版本的ZeroMQ,并且问题基本上是不可判定的

话虽如此,
您的应用程序用户代码(位于
PUB
端)可以解决这个问题,发送2合1格式的消息,并且您的
端可以了解嵌入到消息流中的软逻辑

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


是的,只有用户代码才能处理这个问题, 不是可伸缩的正式通信模式原型——原因有二——它不是任何通用的、普遍适用的行为,而是一种用户特有的特性——加上主题过滤器(无论是
发布方还是
发布方)没有关于词法分支的先验知识(订阅是从左到右进行词法解释的,没有人可以先验地说,下一个订阅者将实际订阅什么,因此“锁定”的最后一个消息存储在新的“下一个”之前将无法预填充订阅者实际上加入并设置其实际的主题过滤器订阅(存储所有确定性的、组合驱动的、可能的{sub-| super-}主题选项是一个非常糟糕的主意,以避免主要的不确定性,不是吗?)