环境
发布客户端为qos 2,子客户端为qos 2,但不要订阅。
子客户
import paho.mqtt.client as mqtt
mqttc = mqtt.Client()
mqttc.connect("localhost", port=1993, keepalive=60)
mqttc.subscribe("TEST", 2)
mqttc.loop_forever()酒吧客户
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)转换到EMQ的PUB客户端很好。但是EMQ转移到子客户端是失败的。
我将发布客户端的qos更改为1,将消息发送给子客户端。
为什么不在qos 2中传输给子客户端?
发布于 2018-01-24 06:53:06
您需要在发布代码中调用mqttc.loop()函数,以便客户端能够处理QOS 2所需的多部分握手。
例如:
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所需的时间。
https://stackoverflow.com/questions/48414693
复制相似问题