我的目标是测量MQTT设备到设备的消息延迟(而非吞吐量),并且我正在寻找对我的代码黑客的反馈。 设置很简单;只有一个设备作为两个端点(具有两个终端会话的旧Linux PC;一个运行订阅者,另一个运行发布者示例应用程序)和tcp://m2m.eclipse.org:1883
处的默认代理)。我将时间捕获代码片段插入到src/samples
文件夹中的C语言发布/订阅示例应用程序中。
以下是更改。请提供反馈。
更改到订阅示例应用(MQTTAsync_subscribe.c
)
在msgarrvd
(已到达消息)功能
//print arrival time
struct timeval tv;
gettimeofday (&tv, NULL);
printf("Message arrived: %ld.%06ld\n", tv.tv_sec, tv.tv_usec);
更改到发布示例应用(MQTTAsync_publish.c
)
在onSend
(回调)功能
struct timeval tv;
gettimeofday (&tv, NULL);
printf("Message with token value %d delivery confirmed at %ld.%06ld\n",
response->token, tv.tv_sec, tv.tv_usec);
通过这些更改(在从发布者确认交付时减去到达订阅者的时间消息之后),我得到的时间在1毫秒到0.5毫秒之间。
问题
这是否有助于作为延迟的粗略基准?
这是往返时间吗?
往返时间在正确的球场吗?应该少?更?
是单向时间吗?
我应该以不同的方式设计延迟基准吗?我需要粗略的测量(我与XMPP比较)。
我使用默认的QoS值(1)。我应该改变吗?
发布者花费有限的时间来连接(和断开连接)。应该添加吗?
答案 0 :(得分:0)
200ms的延迟很高!你能在这里上传你的代码吗?
这是否有助于作为延迟的粗略基准?
- 是的,这是有道理的。但更好的方法是使用订阅的消息进行自动时间减去,并且同步到NTP。
这是往返时间吗?这是单向时间吗?
- 消息已发布 - 您收到发布者的ACK并且相同的消息已转移到订阅的客户端。
往返时间在正确的球场吗?应该少?更?
- 它应该更少。
我应该以不同的方式设计延迟基准吗?我需要粗略的测量(我与XMPP比较)。
我使用默认的QoS值(1)。我应该改变吗?
- 尝试使用QoS 0(点火并忘记)
发布者花费有限的时间来连接(和断开连接)。应该添加吗?
- 是的。它需要添加,但这个时间应该非常小。