Paho python客户端无法正常使用Mosquitto Broker

问题描述:

我想使用由Eclipse提供的paho python库连接到Mosquitto服务器以发布和订阅消息。目前,我有Mosquitto守护进程运行,并且我能够发布和订阅以及经纪人精确地指导主题。我的问题是一旦我尝试使用Paho图书馆,我可以连接到Mosquitto服务器(经纪人),但我无法接收我订阅的主题。发布者和接收者的代码都能正常工作,但可能有一些我缺少的东西。如果有人帮助我,我会很感激。Paho python客户端无法正常使用Mosquitto Broker

我的发布/订阅代码如下:

认购人:


import paho.mqtt.client as mqtt 

def on_connect(client, userdata, flags, rc): 
    print("Connected with result code "+ str(rc)) 
    client.subscribe("test") 

def on_message(client, userdata, msg): 
    print("Recieved message " + str(msg.payload) + " " + msg.topic + "Qos= " + str(msg.qos)) 
    client.disconnect() 

client = mqtt.Client() 
client.connect("localhost", 1883, 60) 

client.on_connect = on_connect 
client.on_massage = on_message 

client.loop_forever() 

出版商:

import paho.mqtt.client as mqtt 

client = mqtt.Client() 
client.connect("localhost", 1883, 60) 
client.publish("test", "Hello World!") 
client.disconnect(); 
+0

错字 - 'client.on_massage = on_message'应该是'client.on_message = on_message' – markroxor

您的发布者不是等待连接在尝试pu之前完成然后再次断开连接,而无需等待发布完成。

您有2个选项

  1. 使用相同的模式用户,并把publishon_connect回调,以确保连接是试图在发布之前完成。

  2. 使用单个发布short cut函数被包括在PAHO库

例如

import paho.mqtt.publish as publish 

publish.single("test", "HelloWorld", hostname="localhost") 

编辑:

另外,在您的用户一堆错字的的

client.on_massage = on_message 

应该client.on_message

而且所有message应该是msgpyload应​​

+0

非常感谢你的回答。让我以另一种方式告诉你这个问题。我的发布者和您提供的快捷方式都能够发布他们的消息。我的问题是,当我订阅从我的Ubuntu终端使用“mosquitto_sub”命令检索到的邮件时,我可以检索它,但上面的订户无法从代理接收它。这现在让我很困惑。 –

+1

在你的用户代码中输入错字'client.on_massage'应该是'client.on_message'(你也应该在调用'connect'之前设置回调) – hardillb

+0

真是太遗憾了。我为你的时间道歉。非常感谢。问题解决了。 –