我的目标是设置一个 Django 应用程序,从代理检索 MQTT 消息。(例如使用Paho MQTT 客户端)。
在我看来,传入消息的异步获取将非常适合新的Django Channels。因为这将提供事件驱动的设置。
我的问题是:Django Channels 真的可以成为桥接 MQTT 消息的工具吗?如果是这样:我该如何设置?
我的目标是设置一个 Django 应用程序,从代理检索 MQTT 消息。(例如使用Paho MQTT 客户端)。
在我看来,传入消息的异步获取将非常适合新的Django Channels。因为这将提供事件驱动的设置。
我的问题是:Django Channels 真的可以成为桥接 MQTT 消息的工具吗?如果是这样:我该如何设置?
我在 MQTT 代理和 ASGI 之间实现了一个非常简单的接口。它仍然是实验性的并且有一些限制,但是您可以使用它来获取在 MQTT 代理中发布的消息(或使用代码作为示例)。
运行 MQTT 代理:
$ systemctl start mosquitto
运行 MQTT-ASGI 接口(类似于daphne)
$ asgimqtt my_django_project.asgi:channels_layer
在中定义路线my_django_project/routing.py
from channels import route
from my_django_app.consumers import on_mqtt_message
channels_routing = [
route("mqtt.sub", on_mqtt_message),
]
在my_django_app/consumers.py
from .models import MqttMessage
def on_mqtt_message(message):
# do something with the message
MqttMessage(topic=message["topic"],
payload=message["payload"],
qos=message["qos",
host=message["host"],
port=message["port"]).save()
来到这里寻求有关此主题的帮助后,我创建了chanmqttproxy
本质上,它是 MQTT 的完全异步 Channels 3 代理,允许发布和订阅。该文档展示了如何扩展标准 Channels 教程,以便在 MQTT 主题上看到聊天消息 - 并且可以从 MQTT 主题发送到所有 websocket 浏览器客户端。
我查看了 MQTTAsgi(并将其归功于灵感),但觉得使用具有完整 Channels 集成的纯异步解决方案更合适。
从 2016 年开始帮助 OP 可能有点晚了,但评论显示人们仍然来这里,所以它可能是像我这样的未来搜索者的一个选择:)