Мне нужно использовать сервис AWS IoT MQTT. Я немного экспериментирую с https://github.com/aws/aws-iot-device-sdk-python прямо сейчас.
Мое приложение будет использовать веб-сокеты для связи с другой службой, а затем публиковать / подписываться на темы MQTT для пересылки / получения сообщений.
Вероятно, что эта библиотека будет блокировать выполнение кода? Я все еще пытаюсь разобраться в asyncio и не уверен, на что мне следует обратить внимание. Как узнать, вызовет ли это проблемы?
Я считаю, что мне нужно будет использовать только AWSIoTMQTTClient из указанной выше библиотеки.
Это отрывок из рабочего кода, который у меня есть:
class AWSIoTClient:
def __init__():
...
self.client = AWSIoTMQTTClient(...)
def subscribe(self, callback):
self.client.subscribe(f'{self.TOPIC}/subscribe/', 0, callback)
def publish(self, message):
self.client.publish(self.TOPIC, message, 0)
class MyWSProtocol(WebSocketClientProtocol):
def set_aws_client(self, client: AWSIoTClient):
client.subscribe(self.customCallback)
self.client = client
def customCallback(self, client, userdata, message):
# This will be called when we send message from AWS
if message.payload:
message = json.loads(message.payload.decode('utf-8').replace("'", '"'))
message['id'] = self.next_id()
self.sendMessage(json.dumps(message).encode('utf-8'))
def onMessage(self, payload, isBinary):
message = json.loads(payload)
# This will forward message to AWS
self.client.publish(str(payload))