基于 SwiftNIO 构建的 MQTT (5.0 和 3.1.1) 的非阻塞、事件驱动的 Swift 客户端。
此库支持 WebSocket 连接和 TLS。它可以在 Swift NIO 运行的所有平台上运行(例如 macOS、iOS、Linux 等)。
使用 SPM 字符串可以轻松地将依赖项包含在您的 Package.swift 文件中。
.package(url: "https://github.com/sroebert/mqtt-nio.git", from: "2.0.0")
MQTTNIO 支持以下平台
此软件包有四个依赖项
apple/swift-nio
用于 IO。apple/swift-nio-ssl
用于 TLS。apple/swift-nio-transport-services
用于支持 Apple 平台作为一等公民。apple/swift-log
用于日志记录。此软件包没有额外的系统依赖项。
let client = MQTTClient(
configuration: .init(
target: .host("127.0.0.1", port: 1883)
),
eventLoopGroupProvider: .createNew
)
client.connect()
当连接失败或与 Broker 断开连接时,客户端会自动重新连接。
let client = MQTTClient(
configuration: .init(
target: .host("127.0.0.1", port: 1883),
protocolVersion: .version3_1_1
),
eventLoopGroupProvider: .createNew
)
client.connect()
let client = MQTTClient(configuration: .init(url: URL(string: "mqtts://test.mosquitto.org")!))
client.connect()
let client = MQTTClient(configuration: .init(url: URL(string: "wss://test.mosquitto.org:8081")!))
client.connect()
client.subscribe(to: "some/topic")
client.unsubscribe(from: "some/topic")
client.publish("Hello World!", to: "some/topic", qos: .exactlyOnce)
client.publish("Hello World!", "some/topic")
client.publish("Hello World!", to: "some/topic", retain: true)
client.whenConnected { response in
print("Connected, is session present: \(response.isSessionPresent)")
}
client.whenDisconnected { reason in
print("Disconnected: \(reason)")
}
client.whenMessage { message in
print("Received: \(message)")
}
对于 Combine
框架可用的平台,也可以订阅发布者。
let cancellable = client.connectPublisher
.sink { response in
print("Connected, is session present: \(response.isSessionPresent)")
}
let cancellable = client.disconnectPublisher
.sink { reason in
print("Disconnected: \(reason)")
}
let cancellable1 = client.messagePublisher
.sink { message in
print("Received: \(message)")
}
let cancellable2 = client.messagePublisher(forTopic: "some/topic")
.sink { message in
print("Received: \(message)")
}
在支持 async/await 的平台上,可以在 MQTTClient
上使用异步函数。
try await client.publish("Hello World!", "some/topic")
for await message in client.messages {
print("Received: \(message)")
}
为了在本地轻松运行测试,请首先生成自签名证书,然后运行 docker-compose 来设置所需的 MQTT Broker 容器。
./mosquitto/certs/generate.sh
docker compose up