简而言之,我有一个Paho / MQTT样本集可以正常工作,但我在检测错误时遇到了问题。具体来说,我没有得到on_connect回调,当给出无效的UserID / Pswd组合时,它会无声地失败。 事实上,通过各种迹象,一切都运行良好!
我做错了什么?
(snip)
def on_connect(client, userdata, flags, rc):
print("Connected with flags [%s] rtn code [%d]"% (flags, rc) )
def on_disconnect(client, userdata, rc):
print("disconnected with rtn code [%d]"% (rc) )
def on_publish(client, userdata, msgID):
print("Published with MsgID [%d]"% (msgID) )
mqttc = mqtt.Client()
mqttc.on_connect = on_connect
mqttc.on_disconnect = on_disconnect
mqttc.on_publish = on_publish
mqttc.username_pw_set(Q_USER, Q_PSWD)
rc=mqttc.connect(Q_BROKER, Q_PORT)
print "Return="+str(rc)
mqttc.loop_start()
rc=mqttc.publish(Q_TOPIC, "Hello, World!")
print "Return="+str(rc)
mqttc.disconnect()
mqttc.loop_stop()
当UserID或Pswd故意错误时输出:
Return=0
Published with MsgID [1]
Return=(0, 1)
disconnected with rtn code [0]
答案 0 :(得分:2)
原来这是一些不同的问题。
最重要的是,虽然文档展示了如何使用API,但他们并没有向您展示如何编写一个强大的程序供生产使用。
我仍然在寻找方法知道所有正在进行的发布呼叫何时清除,而不是使用盲目睡眠呼叫,但我的原始问题已得到解决。
答案 1 :(得分:0)
发送mqtt CONNECT数据包时,应该收到CONNACK响应。该响应包含以下代码
0 - 成功,接受连接
1 - 连接被拒绝,协议不良
2 - 拒绝,客户端ID错误
3 - 拒绝,服务不可用
4 - 拒绝,错误的用户名或密码
5 - 拒绝,未经授权
如您所见,您的回复应为 4 。但它零。可能是您的经纪人没有检查凭据,因此您的连接消息被接受。客户看起来很好。
答案 2 :(得分:-1)
尝试将publish
置于while
这样的循环中
while True:
mqttc.loop()
rc=mqttc.publish(Q_TOPIC, "Hello, World!")
print("Return=" + str(rc))
if sth:
break
mqttc.disconnect()
这样,可以在程序结束之前执行回调函数。