如何通过 wss 快速连接到 MQTT?

Posted

技术标签:

【中文标题】如何通过 wss 快速连接到 MQTT?【英文标题】:How to connect to MQTT over wss with swift? 【发布时间】:2017-12-07 16:32:26 【问题描述】:

我正在使用 CocoaMQTT 并尝试使用以下代码连接到 MQTT 服务:

    let clientID = "CocoaMQTT-" + String(ProcessInfo().processIdentifier)
    //This is myHost: wss://myserver.test:9001
    let mqtt = CocoaMQTT(clie.ntID: clientID, host: "myserver.test", port: 9001)
    mqtt.keepAlive = 10000
    mqtt.username = "username"
    mqtt.password = "password"
    mqtt.enableSSL = true
    mqtt.delegate = self
    mqtt.connect()
    mqtt.autoReconnect = true

我收到错误:Error Domain=GCDAsyncSocketErrorDomain Code=7 "Socket closed by remote peer" UserInfo=NSLocalizedDescription=Socket closed by remote peer

CocoaMQTT 支持 wss 还是只支持 tcp?如果不支持,请问有其他的swift客户端吗?

【问题讨论】:

这可能与自签名证书问题有关吗? 我不这么认为@pan 我猜它只需要用户名和密码 【参考方案1】:

这是来自CocoaMQTT 的示例。也许有帮助。

    let clientID = "CocoaMQTT-\(animal!)-" + String(ProcessInfo().processIdentifier)
    mqtt = CocoaMQTT(clientID: clientID, host: "127.0.0.1", port: 8883)
    mqtt!.username = ""
    mqtt!.password = ""
    mqtt!.willMessage = CocoaMQTTWill(topic: "/will", message: "dieout")
    mqtt!.keepAlive = 60
    mqtt!.delegate = self
    mqtt!.enableSSL = true

    let clientCertArray = getClientCertFromP12File(certName: "client-keycert", certPassword: "MySecretPassword")

    var sslSettings: [String: NSObject] = [:]
    sslSettings[GCDAsyncSocketManuallyEvaluateTrust as String] = NSNumber(value: true)
    sslSettings[kCFStreamSSLCertificates as String] = clientCertArray

    mqtt!.sslSettings = sslSettings

【讨论】:

我不需要证书来连接代理。我找到了一种连接 MQTT-Client-Framework 的方法。不过谢谢 @NathanMartins 你能用套接字连接 MQTT 吗? @hacker_1989 是的,我正在使用这个MQTT-Client-Framework @NathanBarreto 在使用 MQTT-Client-Framework 时,您是否在 MQTTWebsocketTransport 类中收到 Property 'SR_SSLPinnedCertificates' not found on object of type 'NSMutableURLRequest *' 错误?我按照他们在 github 上的教程使用 pod 'MQTTClient/Websocket' 而不是 pod 'MQTTClient' 因为我使用的是 wss 连接 @Bad_Developer 我不记得有这个问题。也许自从我当时使用它后发生了一些变化

以上是关于如何通过 wss 快速连接到 MQTT?的主要内容,如果未能解决你的问题,请参考以下文章

无法从 https 客户端通过 wss 连接到 emqx mqtt 代理

如何配置 mqtt.js 通过 websockets 连接到 iot.eclipse.org

如何通过JMeter将多个MQTT客户端连接到单个iothub

如何通过javascript 使用 MQTT

如何通过javascript 使用 MQTT

如何通过javascript 使用 MQTT