我有一个ZMQ_PUB套接字在~50Hz发送消息。一个目标需要对每个消息做出反应,因此它有一个标准的ZMQ_SUB套接字,其中有一个while(true)循环检查新消息。第二个目的地应该每秒只响应一次"最近的"信息。也就是说,我的第二个目的地需要进行子样本。
对于第二个目的地,我相信我希望有一个基于时间的循环,以我想要的速率(1Hz)调用并且recv()最新消息,其余部分丢弃。我相信这是通过订户上的ZMQ_HWM完成的。是否需要在某处设置另一个选项?
我是否需要担心不同的用户拥有不同的HWM?出版商会生气吗?遗憾的是ZMQ_RATE仅适用于组播套接字。
有没有最好的方法来实现我的尝试?
zmq v3.2.4
答案 0 :(得分:0)
HighWaterMark不是解决您问题的绝佳解决方案。在订阅者上设置它,比如10,每秒读取1条消息,将首先慢慢地给你旧消息,然后扔掉所有新消息,因为它达到了限制。
您可以在发布商处使用主题,这样您就可以过滤掉每50条消息,例如制作主题messageCount % 50
并订阅0
。
否则也许你不应该使用zmq的pub / sub,而是让你看起来像路由器/经销商一样,允许你订阅采样的消息。
最后你也可以发送所有内容。 zmq中几乎没有任何东西(如果它们不像数据库那么重,那么只能使用每50条消息)。