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