为什么 MQTT 在 swift 上连接到主机后一直断开连接



我制作了一个应用程序,可以连接到树莓派自己的wifi网络,并发送一条消息给它一些数据。我正在使用此处找到的cocoamqtt库,但我找不到一种方法来知道客户端何时成功连接,所以我转到了此处找到的Moscapsule库。我可以轻松地使用 cocoamqtt 库连接到我的 pi,但是每当我尝试使用 Moscapsule 库连接到 pi 时,它只会说"从 iDevice 收到断开连接"。

这是我的代码:

import UIKit
import Lottie
//import CocoaMQTT
import Moscapsule
import Firebase
class DeviceSetupLoadingConnectionViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
let connectedRef = Database.database().reference(withPath: ".info/connected")
connectedRef.observe(.value, with: { snapshot in
if let connected = snapshot.value as? Bool, connected {
print("Connected")
} else {
print("Not connected")
}
})
connect()
}
func connect(){
let mqttClient = MQTTConfig(clientId: "iDevice", host: "192.168.4.1", port: 1883, keepAlive: 60)
let client = MQTT.newConnection(mqttClient)
client.subscribe("PSK", qos: 0)
}

日志:

1564204025: mosquitto version 1.6.2 starting
1564204025: Using default config.
1564204025: Opening ipv4 listen socket on port 1883.
1564204025: Opening ipv6 listen socket on port 1883.
1564204027: New connection from 192.168.4.1 on port 1883.
1564204027: New client connected from 192.168.4.1 as Pi (p2, c1, k60).
1564204027: No will message specified.
1564204027: Sending CONNACK to Pi (0, 0)
1564204027: Received SUBSCRIBE from Pi
1564204027:     PSK (QoS 0)
1564204027: Pi 0 PSK
1564204027: Sending SUBACK to Pi
1564204033: New connection from 192.168.4.9 on port 1883.
1564204033: New client connected from 192.168.4.9 as Bdz3SjkBU0 (p1, 
c1, k0).
1564204033: No will message specified.
1564204033: Sending CONNACK to Bdz3SjkBU0 (0, 0)
1564204033: Received SUBSCRIBE from Bdz3SjkBU0
1564204033:     PSK (QoS 0)
1564204033: Bdz3SjkBU0 0 PSK
1564204033: Sending SUBACK to Bdz3SjkBU0
1564204033: Received DISCONNECT from Bdz3SjkBU0
1564204033: Client Bdz3SjkBU0 disconnected.

我将在这里冒昧,因为我从未使用过 Swift。

对 mqtt 客户机对象client的唯一引用是作为connect()方法中的局部变量。

此方法返回后,client对象将超出范围,因此将有资格进行垃圾回收。我假设client对象有一个析构函数,该析构函数在实际销毁之前调用断开连接,因此立即断开连接。

解决方法是确保存在对client对象的引用

,该对象可以根据需要存在。

最新更新