c++ - 如何获取 ZeroMQ 时间戳?

标签 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 获取这些信息?提前感谢任何可以提供帮助的人!

最佳答案

Is there a way to get this information from ZeroMQ ?

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


有什么选择吗?

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

鉴于这还不够,开始使用 Poller.poll() 的非阻塞模式方法,并将任何此类延迟减少到您的意图可以处理的水平。一旦处理了一个几乎-零延迟 .poll()Poller.poll() 的“内部”具有零等待时间加上避免花费任何此类 usleep()以尽量减少盲点。

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

关于c++ - 如何获取 ZeroMQ 时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50847380/

相关文章:

c++ - 数据库连接可以重用吗?

c++ - 使用 typedeffing 模板化基类来简化代码是一种好习惯吗?

c++ - C++ 中 const 的这两种用法有什么区别?

mysql - 如何使用 SQL 查找不交叉的时间集?

javascript - 如何将包含秒数的字符串解析为 h/m/s 格式

python - 安装 ZeroMQ 时出错

c++ - Qt5 WebKit 未检测到 NPAPI 插件

php - 从时间戳计算

node.js - 我应该如何处理同一主机上同一端口上的多个发布者?

iphone - 为 iPhone 编译 C lib