如何在 React Native 中处理与 Paho 的正常断开连接?
How do handle a graceful disconnect with Paho in React Native?
我需要处理与 https://www.npmjs.com/package/react-native-paho-mqtt 到 mosquitto 代理的正常断开连接,为此我想在实际断开连接之前向代理发送一条 "disconnect" 消息。
鉴于在库提供的客户端中似乎没有 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
问题是因为您正试图在断开连接之前发送 QOS2 消息。
QOS2 消息与代理进行 3 次握手,以确保消息得到代理的正确确认,这需要多个低级消息来回传递,这是由 Paho 库在后台异步处理的.通过在调用 send 之后立即调用 disconnect,您将在握手完成之前关闭 MQTT 客户端。
您可以使用 onMessageDelivered()
回调来确定消息何时送达。请参阅文档 here
我需要处理与 https://www.npmjs.com/package/react-native-paho-mqtt 到 mosquitto 代理的正常断开连接,为此我想在实际断开连接之前向代理发送一条 "disconnect" 消息。
鉴于在库提供的客户端中似乎没有 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
问题是因为您正试图在断开连接之前发送 QOS2 消息。
QOS2 消息与代理进行 3 次握手,以确保消息得到代理的正确确认,这需要多个低级消息来回传递,这是由 Paho 库在后台异步处理的.通过在调用 send 之后立即调用 disconnect,您将在握手完成之前关闭 MQTT 客户端。
您可以使用 onMessageDelivered()
回调来确定消息何时送达。请参阅文档 here