如何在 python 中使用 Mosquitto 发布和订阅图像文件?

How can I publish and subscribe a image file using Mosquitto in python?

我是一名学生,一直在研究MQTT

我一直在尝试使用 mosquitto 在 Raspberry Pi 中发送图像文件。

这是一个pub.py

    import paho.mqtt.client as mqtt

    def on_public(mosq, userdata, mid):
        mosq.disconnect()

    client = mqtt.Client()
    client.connect("test.mosquitto.org", 1883, 60)
    f=open("1.jpg", "rb")
    fileContent = f.read()
    byteArr = bytes(fileContent)
    client.publish("image",byteArr,0)
    client.loop(5)

这是一个sub.py

    import paho.mqtt.client as mqtt

    def on_public(client, userdata, rc):
        print("Connect with result code " + str(rc))
        client.subscribe(“image”)

    def on_public(client, userdata, msg):
        print("Topic : " , msg.topic + "\n Image : " + byteArr

    client = mqtt.Client()
    client.on_connect = on_connect
    client.on_message = on_message
    client.connect("test.mosquitto.org", 1883, 60)
    client.loop(20)

问题是我不知道如何订阅我已经发布的图片。

我觉得逻辑在我脑子里找到了,但是行不通。

我尝试了很多方法,例如使用 write() 或类似的东西。

很抱歉,如果它只是一个基本的编码技巧,但我已经使用 MQTT,R-pi 制作了一个系统。

请帮助我,我需要你的帮助。

在正常情况下,只有订阅客户端已连接并在消息发布前订阅,消息才会被传递。 (有关如何获取订阅者断开连接时发布的消息,请搜索永久订阅)

您的订阅者应用应该类似于:

import paho.mqtt.client as mqtt

def on_connect(client, userdata, rc):
    print("Connect with result code " + str(rc))
    client.subscribe(“image”)

def on_message(client, userdata, msg):
    print("Topic : " , msg.topic + "\n Image : " + msg.payload

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("test.mosquitto.org", 1883, 60)
client.loop_forever()

client.loop_forever() 是保持订阅者 运行 的重要一点,而不仅仅是 5 秒。

这会将原始字节打印到控制台,这不会很有用。要将图像写入文件,请尝试这样的操作

def on_message(client, userdata, msg)
    f = open('/tmp/output.jpg', 'w')
    f.write(msg.payload)
    f.close()

这会将文件写入 /tmp/output.jpg