python - 带有 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 函数。如何做到这一点?
解决方案
来到这里寻求有关此主题的帮助后,我创建了chanmqttproxy
本质上,它是 MQTT 的完全异步 Channels 3 代理,允许发布和订阅。该文档展示了如何扩展标准 Channels 教程,以便在 MQTT 主题上看到聊天消息 - 并且可以从 MQTT 主题发送到所有 websocket 浏览器客户端。
我查看了 MQTTAsgi(并将其归功于灵感),但觉得使用具有完整 Channels 集成的纯异步解决方案更合适。
推荐阅读
- javascript - 将 React 类组件转换为具有许多回报的功能组件
- qr-code - 一个二维码可以处理多少个纯文本字符?
- regex - 使用正则表达式模式从日志文件中解析数据
- vue.js - UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'length' of undefined on Laravel Mix with vuetify-loader
- sql - SQL:是否可以将 data_type 传递给变量中的函数?(功能转换)
- c# - 将来自 DataReader 的所有结果以 JSON 格式写入文件,同时保持整个结果集超出内存
- mysql - 我如何在这个查询中得到正确的结果?
- python - python多处理池 - 创建的工人数量错误
- python - Opencv 2.4.13 需要 python 2.7,但是 Monoocular Total Capture repo 需要 python 3.5
- c# - BigInteger.TryParse 在本地工作,但不能在 Azure VM 上工作