IoT Core MQTT消息在QoS0和QoS1之间发送的频率差异

0

【以下的问题经过翻译处理】 你好,我修改了aws-iot-device-sdk-python的basicPubSub示例程序,尝试以10Hz的速度向Iot Core发送mqtt消息。同时,我使用AWS MQTT测试客户端订阅和监视mqtt消息。

我没有更改AWSIoTMQTTClient连接配置,只通过函数myAWSIoTMQTTClient.publish(topic, messageJson, _qos)更改了QoS。对于QoS=0,发送循环时间约为0.1秒,MQTT测试客户端将消息更新速度约为10Hz。然而,对于QoS=1,发送循环时间变成了约为0.4〜0.7秒,MQTT测试客户端将消息更新速度约为2Hz。

我想知道如何提高QoS1的发送速率,以及它的最大频率是多少。非常感谢。

下面是我的主循环代码。

if args.mode == 'both' or args.mode == 'publish':
    message = {}
    message['message'] = args.message
    message['sequence'] = loopCount
    messageJson = json.dumps(message)
    myAWSIoTMQTTClient.publish(topic, messageJson, _qos)
    # if args.mode == 'publish':
    # print('Published topic %s: %s\n' % (topic, messageJson))
    loopCount += 1
toc = time.time()
t_interval = toc -tic
tic = toc
print('[%f]Published topic %s: %s\n' % (t_interval,topic, messageJson))
time.sleep(0.1)
profile picture
EXPERTE
gefragt vor 6 Monaten25 Aufrufe
1 Antwort
0

【以下的回答经过翻译处理】 你好。根据你目前的代码,你的QoS发送循环时间几乎完全由time.sleep(0.1)调用控制。

该示例使用**publish()**方法,对于QoS 1是阻塞调用。在调用返回之前,它将等待来自AWS IoT Core的PUBACK:https://github.com/aws/aws-iot-device-sdk-python/blob/0b195b82349e2d5b9715d4880da747bfbaaa1437/AWSIoTPythonSDK/core/protocol/mqtt_core.py#L267-L273

相比之下,你可能更喜欢**publishAsync()**方法,它不会阻塞,而是允许你同时进行多个QoS 1事务。请参见此示例:https://github.com/aws/aws-iot-device-sdk-python/blob/master/samples/basicPubSub/basicPubSubAsync.py

如果你尚未这样做,应该使用最近地区的AWS IoT Core端点来最小化往返时间。如果真的要最大化吞吐量,应该完全去掉time.sleep()

需要注意的是,IoT Core每个客户端连接每秒最多可发布100次,并且任何时候最多可以同时进行100个传入的QoS 1事务。 https://docs.aws.amazon.com/general/latest/gr/iot-core.html#message-broker-limits

最后,我建议你使用V2 SDK而不是V1 SDK:https://github.com/aws/aws-iot-device-sdk-python-v2。来自V1 README:

现在已经推出了新的AWS IoT Device SDK:https://github.com/awslabs/aws-iot-device-sdk-python-v2。这是一个完全重新设计的SDK,旨在提高可靠性、性能和安全性。我们期待你的反馈!

此SDK将不再接收功能更新,但将接收安全更新。

profile picture
EXPERTE
beantwortet vor 6 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen