如何获得ZeroMQ时间戳?

时间:2018-06-13 22:49:53

标签: c++ time zeromq

我正在编写一个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获取此信息?提前感谢任何有帮助的人!

1 个答案:

答案 0 :(得分:2)

  

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

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

任何选项?

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

如果这还不够,请开始使用Poller.poll()方法的非阻塞模式,并将任何此类延迟降低到您的意图可以使用的级别。一旦处理几乎 -zero-latency .poll(),其中“等待”持续时间为“内部”Poller.poll(),请避免花费任何此类usleep()以尽量减少盲目-spot。

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