首页 > 解决方案 > 带有 MQTT 的 Django 通道

问题描述

我正在尝试使用 django 通道创建 websocket 并将 mqtt 与通道集成,并且 mqtt 发布消息应该由 consumer.py 内部的函数接收到应该发送到 websocket 客户端。我有如下消费者渠道

消费者.py

from channels.consumer import AsyncConsumer
from paho.mqtt import client as Mqtt

class Testing(AsyncConsumer):
    async def websocket_connect(self, event):
        obj = Mqtt.Client()  
        obj.connect("localhost", 1883, 60)
        obj.on_message = self.updater
        obj.subscribe("Testing")
        obj.loop_start()


    async def updater(self, arg1, arg2, message):
           print(message)
           await self.send({
                "type": "websocket.send",
                "text": message})

    async def websocket_receive(self, text_data):
        pass

在上面的 mqtt 连接已经发生,但是如果我向主题发布消息,它就不起作用。没有调用 consumer.py 中的 updater 函数。如何做到这一点?

标签: pythondjangomqttdjango-channelspaho

解决方案


来到这里寻求有关此主题的帮助后,我创建了chanmqttproxy

本质上,它是 MQTT 的完全异步 Channels 3 代理,允许发布和订阅。该文档展示了如何扩展标准 Channels 教程,以便在 MQTT 主题上看到聊天消息 - 并且可以从 MQTT 主题发送到所有 websocket 浏览器客户端。

我查看了 MQTTAsgi(并将其归功于灵感),但觉得使用具有完整 Channels 集成的纯异步解决方案更合适。


推荐阅读