2017-06-23 84 views
0

我想使用由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

回答

1

您的發佈者不是等待連接在嘗試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

真是太遺憾了。我爲你的時間道歉。非常感謝。問題解決了。 –

相關問題