[英]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.