如何通过 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