已建立连接,但无法在 paho mqtt 客户端上检索消息负载
Connection is established, but unable to retrieve message payload on paho mqtt client
我的客户端无法从 MQTT 服务器接收消息负载。我在我的电脑上设置了 mosquitto 作为服务器和发布者并执行以下命令:
mosquitto_pub -h 192.168.1.2 -t topic/test -m "testing" -i simulator -d
我自己订阅成功并收到负载。
但是,我使用 paho mqtt 的客户端只收到成功的连接而没有有效负载消息。所以我这里有以下代码:
def on_connect(client, userdata, flags, rc):
print("connection ok")
client.subscribe("topic/test")
def on_message(client, userdata, msg):
print("Message received! " + str(msg.payload))
if msg.payload == "testing":
print("Message received")
# Do something
...
def main():
#MQTT
broker = "192.168.1.2" #broker ip
client = mqtt.Client("simulator")
client.on_connect = on_connect
client.on_message = on_message
client.connect(broker, 1883, 60)
client.loop_start()
while(1):
...
所以它确实打印了“连接正常”,但没有打印“消息已收到!...”
您在 mosquitto_pub
和 python 中使用相同的 client-id
(simulator
)。根据 the spec:
If the ClientId represents a Client already connected to the Server then the Server MUST disconnect the existing Client
所以发生的事情是:
- Python 客户端连接并订阅。
mosquitto_pub
连接,代理断开连接 python 客户端。
mosquitto_pub
发布消息(但由于没有订阅,QOS 0 消息将被代理丢弃)。
- Python 客户端重新连接并再次订阅。
尝试使用不同的 client-id 和 mosquitto_pub
(当我以这种方式测试时,您的代码工作正常 - 在 while(1)
中添加了一个 time.sleep(1)
)。
我的客户端无法从 MQTT 服务器接收消息负载。我在我的电脑上设置了 mosquitto 作为服务器和发布者并执行以下命令:
mosquitto_pub -h 192.168.1.2 -t topic/test -m "testing" -i simulator -d
我自己订阅成功并收到负载。
但是,我使用 paho mqtt 的客户端只收到成功的连接而没有有效负载消息。所以我这里有以下代码:
def on_connect(client, userdata, flags, rc):
print("connection ok")
client.subscribe("topic/test")
def on_message(client, userdata, msg):
print("Message received! " + str(msg.payload))
if msg.payload == "testing":
print("Message received")
# Do something
...
def main():
#MQTT
broker = "192.168.1.2" #broker ip
client = mqtt.Client("simulator")
client.on_connect = on_connect
client.on_message = on_message
client.connect(broker, 1883, 60)
client.loop_start()
while(1):
...
所以它确实打印了“连接正常”,但没有打印“消息已收到!...”
您在 mosquitto_pub
和 python 中使用相同的 client-id
(simulator
)。根据 the spec:
If the ClientId represents a Client already connected to the Server then the Server MUST disconnect the existing Client
所以发生的事情是:
- Python 客户端连接并订阅。
mosquitto_pub
连接,代理断开连接 python 客户端。mosquitto_pub
发布消息(但由于没有订阅,QOS 0 消息将被代理丢弃)。- Python 客户端重新连接并再次订阅。
尝试使用不同的 client-id 和 mosquitto_pub
(当我以这种方式测试时,您的代码工作正常 - 在 while(1)
中添加了一个 time.sleep(1)
)。