环境
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客户端?
答案 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