Mqtt 使用Paho示例发布/订阅应用程序测量端到端延迟

Mqtt 使用Paho示例发布/订阅应用程序测量端到端延迟,mqtt,mosquitto,paho,Mqtt,Mosquitto,Paho,我的目标是测量MQTT设备到设备的消息延迟(而不是吞吐量),我正在寻找关于我的代码攻击的反馈。设置简单;只有一个设备作为两个端点(旧Linux PC,具有两个终端会话;一个运行订阅服务器,另一个运行发布者示例应用程序)和位于tcp://m2m.eclipse.org:1883)。我将时间捕获代码片段插入到src/samples文件夹中的C语言发布/订阅示例应用程序中 以下是变化。请提供反馈 更改订阅示例应用程序(MQTTAsync\u subscribe.c) 在msgarrvd(消息到达)功能

我的目标是测量MQTT设备到设备的消息延迟(而不是吞吐量),我正在寻找关于我的代码攻击的反馈。设置简单;只有一个设备作为两个端点(旧Linux PC,具有两个终端会话;一个运行订阅服务器,另一个运行发布者示例应用程序)和位于
tcp://m2m.eclipse.org:1883
)。我将时间捕获代码片段插入到
src/samples
文件夹中的C语言发布/订阅示例应用程序中

以下是变化。请提供反馈

更改订阅示例应用程序(
MQTTAsync\u subscribe.c

msgarrvd
(消息到达)功能的顶部插入以下行

//print arrival time
struct timeval tv;
gettimeofday (&tv, NULL);
printf("Message arrived: %ld.%06ld\n", tv.tv_sec, tv.tv_usec);
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);
更改发布示例应用程序(
MQTTAsync\u publish.c

onSend
(回调)函数的顶部插入下面的行

//print arrival time
struct timeval tv;
gettimeofday (&tv, NULL);
printf("Message arrived: %ld.%06ld\n", tv.tv_sec, tv.tv_usec);
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)。我应该换吗


发布服务器连接(和断开连接)需要有限的时间。应该添加这些吗?

200毫秒延迟很高!你能在这里上传你的代码吗

作为延迟的粗略基准,这有意义吗

--是的,这很有道理。但更好的方法是使用订阅的消息进行自动时间减法,并将两者同步到NTP

这是往返时间吗?现在是单程时间吗

--消息已发布-您收到发布者的确认,并且同一消息已传输到订阅的客户端

往返时间在正确的球场吗?应该少一点吗?更多

--应该少一点

我应该以不同的方式设计延迟基准吗?我需要一个粗略的测量(我正在与XMPP进行比较)

我使用的是默认的QoS值(1)。我应该换吗

--尝试QoS 0(启动并忘记)

发布服务器连接(和断开连接)需要有限的时间。是否应该增加这些


--对。它需要添加,但这一时间应该很短。

我从异步示例应用程序(用于发布订阅)转移到同步示例应用程序,发现往返延迟为200毫秒。有人能对这个数字发表评论吗?运行你自己的代理,你不知道每次运行之间我在m2m.eclipse.org上的更改是如何加载的,它的平均负载与你的应用程序相比如何,最后它连接到了什么硬件/网络