mqtt消息未在pub和sub客户端的qos 2中发送

时间:2018-01-24 04:12:18

标签: python mqtt

环境

  • OS:CENTOS 6.5
  • EMQ:2.3.1

PUB客户端是qos 2,SUB客户端是qos 2.但是不要订阅。

SUB客户

import paho.mqtt.client as mqtt
mqttc = mqtt.Client()
mqttc.connect("localhost", port=1993, keepalive=60)
mqttc.subscribe("TEST", 2)
mqttc.loop_forever()

PUB客户端

for i in xrange(0, 100):
    print 'i:{}'.format(i)
    payload = {'type': 'TEST', 'raw_data':data}
    (rc, mid) = mqttc.publish("TEST", json.dumps(payload), qos=2)
    print 'i:{} rc:{} mid:{}'.format(i, rc, mid)
    time.sleep(0.3)

PUB客户端转移到EMQ是好的。但EMQ转移到SUB客户端已被破坏。

我将PUB客户端的qos更改为1.消息将发送到SUB客户端。

为什么不在qos 2中转移到Sub客户端?

1 个答案:

答案 0 :(得分:0)

您需要在发布代码中调用mqttc.loop()函数,以便客户端可以处理QOS 2所需的多部分握手。

e.g。

for i in xrange(0, 100):
    print 'i:{}'.format(i)
    payload = {'type': 'TEST', 'raw_data':data}
    (rc, mid) = mqttc.publish("TEST", json.dumps(payload), qos=2)
    mqttc.loop()
    print 'i:{} rc:{} mid:{}'.format(i, rc, mid)
    time.sleep(0.3)

您可能希望查看循环函数的一些可选参数,以控制将时间保持正确所需的时间https://pypi.python.org/pypi/paho-mqtt/1.1#network-loop