我需要使用https://www.npmjs.com/package/react-native-paho-mqtt处理与蚊子经纪人的正常断开连接,为此,我想在实际断开连接之前向该代理发送“断开连接”消息。
鉴于该库提供的客户端中似乎没有send()函数的回调,我如何知道消息已发送,并且仅在发生这种情况时才断开客户端连接?目前,仅当我注释掉断开连接行时才收到消息,这意味着断开连接发生在发送消息之前。
我当时正在考虑使用setTimeout,但这真的是最好的方法吗?
const message = new Message(JSON.stringify({payload: 'offline'}));
message.qos = 2;
message.destinationName = 'connection/1';
client.send(message);
client.disconnect() // <-- if I comment this line out, the message is received
答案 0 :(得分:1)
问题是因为您正试图在断开连接之前向QOS2发送消息。
QOS2消息与代理进行3种握手,以确保代理正确确认了该消息,这需要多个低级消息来回传递,并且Paho库在后台对其进行异步处理。通过在调用send之后立即调用断开连接,您将在完成此握手之前关闭MQTT客户端。
您可以使用onMessageDelivered()
回调函数确定邮件何时传递。参见文档here