如何获取 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 获取这些信息?在此先感谢任何可以提供帮助的人!
Is there a way to get this information from ZeroMQ ?
幸运的是,不是直接来自 ZeroMQ API 原样(2018/Q2)。
有什么选择吗?
鉴于粗略的 TimeDOMAIN 分辨率很好,每次您的代码重新循环 while(){...; <here> }
代码块时只需存储一个时间戳。这种方法有一个大约 usleep()
持续时间的盲点 - 延迟,其中更精确的收据时刻是不确定的。
鉴于这还不够,请开始使用 Poller.poll()
方法的非阻塞模式,并将任何此类延迟减少到您的意图可以达到的水平。一旦处理了一个 almost-零延迟 .poll()
具有零等待时间 "inside" a Poller.poll()
加上避免花费任何这样的 usleep()
所以尽量减少盲点。
如果有极端需要,请重构代码并引入新的(私有)API 扩展,以便从 Context()
-实例内部状态寄存器中读取此类详细信息。这将使您更接近(如果不是最接近)消息到达 SUB
端 Context()
内部处理手中的实际时刻.
我正在编写一个 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 获取这些信息?在此先感谢任何可以提供帮助的人!
Is there a way to get this information from ZeroMQ ?
幸运的是,不是直接来自 ZeroMQ API 原样(2018/Q2)。
有什么选择吗?
鉴于粗略的 TimeDOMAIN 分辨率很好,每次您的代码重新循环 while(){...; <here> }
代码块时只需存储一个时间戳。这种方法有一个大约 usleep()
持续时间的盲点 - 延迟,其中更精确的收据时刻是不确定的。
鉴于这还不够,请开始使用 Poller.poll()
方法的非阻塞模式,并将任何此类延迟减少到您的意图可以达到的水平。一旦处理了一个 almost-零延迟 .poll()
具有零等待时间 "inside" a Poller.poll()
加上避免花费任何这样的 usleep()
所以尽量减少盲点。
如果有极端需要,请重构代码并引入新的(私有)API 扩展,以便从 Context()
-实例内部状态寄存器中读取此类详细信息。这将使您更接近(如果不是最接近)消息到达 SUB
端 Context()
内部处理手中的实际时刻.