Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Sockets 什么';对ZMQ发布子连接进行子采样的最佳方法是什么?_Sockets_Zeromq_Publish Subscribe_Sample - Fatal编程技术网

Sockets 什么';对ZMQ发布子连接进行子采样的最佳方法是什么?

Sockets 什么';对ZMQ发布子连接进行子采样的最佳方法是什么?,sockets,zeromq,publish-subscribe,sample,Sockets,Zeromq,Publish Subscribe,Sample,我有一个ZMQ_酒吧插座,以~50Hz的频率发送信息。一个目的地需要对每条消息做出反应,因此它有一个标准的ZMQ_子套接字,带有一个while(true)循环来检查新消息。第二个目的地每秒只能对“最近”消息作出一次反应。也就是说,我的第二个目的地需要进行子采样 对于第二个目的地,我相信我希望有一个基于时间的循环,以我想要的速率(1Hz)调用,并接收最新消息,删除其余消息。我相信这是通过用户上的ZMQ_HWM完成的。是否还有其他需要设置的选项 我是否需要担心不同的用户有不同的硬件管理系统?出版商会

我有一个ZMQ_酒吧插座,以~50Hz的频率发送信息。一个目的地需要对每条消息做出反应,因此它有一个标准的ZMQ_子套接字,带有一个while(true)循环来检查新消息。第二个目的地每秒只能对“最近”消息作出一次反应。也就是说,我的第二个目的地需要进行子采样

对于第二个目的地,我相信我希望有一个基于时间的循环,以我想要的速率(1Hz)调用,并接收最新消息,删除其余消息。我相信这是通过用户上的ZMQ_HWM完成的。是否还有其他需要设置的选项

我是否需要担心不同的用户有不同的硬件管理系统?出版商会生气吗?很遗憾,ZMQ_速率只适用于多播套接字

有没有最好的方法来完成我正在尝试的事情



zmq v3.2.4

HighWaterMark将不是解决您问题的理想方案。在订阅者上设置为,比方说,10,每秒阅读1条消息,只会首先缓慢地给你旧消息,然后扔掉所有新消息,因为达到了它的极限

您可以在publisher上使用一个主题,使您能够过滤掉每50条消息,例如使主题
messageCount%50
并订阅
0

否则,您可能不应该使用zmq的发布/订阅,而是使用路由器/经销商,让您可以订阅采样消息


最后,你也可以把它们全部寄出去。50 m/s在zmq中几乎算不上什么(如果它们不是像MEG那样的数据量大的话),然后只使用第50条消息。

我是第一次这样做的,所以可能有更好的方法来响应,但我找到了一个适合我需要的解决方案(尽管可能不太理想)。我添加了一个中间对象,它订阅每条消息,将最近的消息存储到一个成员变量,并定期重新发布最后存储的消息。我有cpp和python实现。然后,无论我想在哪里接收采样数据,我都会在它前面实例化这个对象并旋转它。目的地没有注意到内容上的任何差异,只注意速度。有趣的解决方案。是否有多个<代码>中间对象< /代码>或考虑有多个对象?没有什么能阻止我拥有多个“速率限制”对象。我可以在每个端点前部署它们,或者在需要特定速率的任何端点(一个以100Hz运行,另一个以50Hz运行)部署一对多的重新发布器。我很高兴发布代码。我是在评论中这样做的,还是编辑我的问题?我想我会更容易把它作为编辑添加到答案中。否则,请参考要点。