如何在 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