繁体   English   中英

如何获得ZeroMQ时间戳?

[英]How to get ZeroMQ Timestamp?

我正在编写一个C ++ / ZMQ脚本,该脚本的订阅者通过单独的脚本从发布者处获取数据。 我无法编辑发布者代码,我需要获得ZeroMQ订阅者收到消息的时间。

基本上,我有:

void *zmq_subscriber_ = zmq_socket( context, ZMQ_SUB );
zmq_setsockopt( zmq_subscriber_, ZMQ_SUBSCRIBE, NULL, 0 );

while ( ( zmq_msg_recv( &msg, zmq_subscriber_, ZMQ_DONTWAIT ) ) < 0 )
{ usleep( 1000 ); }

我需要知道订户何时收到消息。 有没有办法从ZeroMQ获取此信息? 提前感谢任何可以提供帮助的人!

有没有办法从ZeroMQ获取此信息?

幸运的是,不是直接来自ZeroMQ API(2018 / Q2)。


任何选择?

鉴于粗略的TimeDOMAIN分辨率很好,只需在每次代码重新循环while(){...; <here> }时存储一个时间戳while(){...; <here> } while(){...; <here> } codeblock。 这种方法有一个关于usleep() -duration的盲点 - 延迟,其中更精确的收据时刻是不可判定的。

鉴于这还不够,请开始使用Poller.poll()方法的非阻塞模式,并将任何此类延迟减少到您的意图可以使用的级别。 一旦处理了一个几乎为 -zero-latency .poll()其内部为零等待持续时间, Poller.poll()加上避免花费任何这样的usleep()以最小化盲点。

如果极端需要,重构代码并引入新的(私有)API扩展,以便从Context() instance内部状态寄存器中读取此类详细信息。 如果不是最接近的话,这会让你更接近消息到达SUB -side Context()内部处理的实际时刻。

暂无
暂无

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

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