首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提高连接到AWS IOT核心连接的稳定性

提高连接到AWS IOT核心连接的稳定性
EN

Stack Overflow用户
提问于 2020-06-21 07:53:36
回答 1查看 297关注 0票数 0

我正在尝试将亚马逊网络服务的IoT与Python结合使用。我正在实现一个MQTT客户端:

代码语言:javascript
复制
#Exte codigo SOLO SIRVE para escritorio
#NO USARLO en una PYCOM

#
from AWSIoTPythonSDK.MQTTLib import AWSIoTMQTTClient 
from pathlib import Path
import time

#
cert_folder=Path("certificados")

# user specified callback function
def customCallback(client, userdata, message):
    print("Received a new message: ")
    print(message.payload)
    print("from topic: ")
    print(message.topic)
    print("--------------\n\n")

# AWS general configuration
AWS_PORT = 8883
AWS_HOST = '*****.amazonaws.com'
AWS_ROOT_CA = cert_folder / "*****.pem"
AWS_CLIENT_CERT = cert_folder / "*****.cert.pem"
AWS_PRIVATE_KEY = cert_folder / "*****.private.key"

# For certificate based connection
myMQTTClient = AWSIoTMQTTClient("Pycom-client")
# For Websocket connection
# myMQTTClient = AWSIoTMQTTClient("Pycom-client", useWebsocket=True)

# Configurations
# For TLS mutual authentication
myMQTTClient.configureEndpoint(AWS_HOST, 8883)
# For Websocket
# myShadowClient.configureEndpoint(AWS_HOST, 443)
myMQTTClient.configureCredentials(AWS_ROOT_CA, AWS_PRIVATE_KEY, AWS_CLIENT_CERT)
# For Websocket, we only need to configure the root CA
# myMQTTClient.configureCredentials(AWS_ROOT_CA)

myMQTTClient.configureOfflinePublishQueueing(-1)  # Infinite offline Publish queueing
myMQTTClient.configureDrainingFrequency(2)  # Draining: 2 Hz
myMQTTClient.configureConnectDisconnectTimeout(10)  # 10 sec
myMQTTClient.configureMQTTOperationTimeout(50)  # 5 sec

#
if myMQTTClient.connect():
    print('AWS connection succeeded')

myMQTTClient.publish("topic_1", "Hola AWS!!!", 0)

# Subscribe to topic
myMQTTClient.subscribe("topic_2", 1, customCallback)

myMQTTClient.disconnect()

#Ciclo principal
while True:

    myMQTTClient.connect()

    myMQTTClient.publish("topic_1", "Hola AWS!!!", 0)

    # Subscribe to topic
    myMQTTClient.subscribe("topic_2", 1, customCallback)

    myMQTTClient.disconnect()

然而,连接仍然非常不稳定。我经常收到超时或服务器拒绝消息。我可以发送几条消息并接收其他消息。但是通过订阅接收消息很困难,我不知道是否应该使用额外的代码来改进它。

EN

回答 1

Stack Overflow用户

发布于 2020-07-25 21:46:13

据我所知,您希望使用IoT将MQTT消息从您的设备发布到。此外,您还希望看到通过订阅相关主题发布的消息。您代码中的主要问题是您没有与AWS IoT消息代理建立持久会话。在while语句中,您不断地连接、发布、订阅和断开连接。

我建议您更新代码,如下所示:

代码语言:javascript
复制
# Connect and subscribe to AWS IoT
myMQTTClient.connect()
myMQTTClient.subscribe(your_topic_name, 1, customCallback)
time.sleep(1)
 
# Publish to the same topic in a loop forever
while True:
    myMQTTClient.publish(your_topic_name, "Hola AWS!!!", 0)
    time.sleep(1)

在本例中,您不需要myMQTTClient.disconnect(),因为您有一个无限的while循环。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62493005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档