0

我的目标是测量 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)。我应该改变它吗?

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

4

1 回答 1

0

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

作为延迟的粗略基准,这是否有意义?

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

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

-- 消息已发布 - 您收到了发布者的 ACK,并且相同的消息已传输到订阅的客户端。

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

——应该少一些。

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

我正在使用默认的 QoS 值 (1)。我应该改变它吗?

-- 尝试使用 QoS 0(即发即弃)

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

- 是的。它需要添加,但这个时间应该非常小。

于 2014-12-14T23:19:58.713 回答