HarmonyOS 鸿蒙Next轻量级网络传输协议MQTT

HarmonyOS 鸿蒙Next轻量级网络传输协议MQTT

MQTT

MQTT(Message Queuing Telemetry Transport)是一种轻量级、基于发布/订阅模型的物联网(IoT)消息传输协议,专为低带宽、高延迟、不稳定网络环境下的设备通信而设计。它采用 Broker(代理服务器) 架构,实现设备之间的高效、可靠通信。

MQTT 提供 3种 QoS 等级,控制消息传输的可靠性:

QoS 等级(服务质量) 名称 可靠性 可能重复 适用场景
0 最多一次(At Most Once) ❌ 不保证 ❌ 不重传 实时数据(如传感器数据)
1 至少一次(At Least Once) ✅ 保证送达 ⚠️ 可能重复 控制指令(如开关命令)
2 恰好一次(Exactly Once) ✅ 保证送达且不重复 ✅ 无重复 关键数据(如支付指令)

publisher->Broker对应的topic->Subscriber

  • MQTT 是物联网的首选协议,因其轻量、高效、支持 QoS。
  • 核心机制:发布/订阅 + Broker 中转,实现设备解耦。
  • 关键特性
    • Topic 分层管理。
    • QoS 0/1/2 保障消息可靠性。
    • 支持离线消息、安全认证(TLS/SSL)。
  • 典型应用:智能家居、工业 IoT、车联网、移动推送。

MQTT 客户端可以同时是发布者和订阅者(即 Pub-Sub 双角色)。

发布者也会收到自身发布的消息,因为都订阅了同一个主题,主题topic用/隔开不同层级

基本用法

添加依赖,配置声明:

implementation ("org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.4")
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
<uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/><!--防止设备休眠,确保 MQTT 长连接在后台持续运行-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--检测网络状态变化(如 WiFi 切换为移动数据),MQTT 可据此自动重连-->
   
   <application
   <service android:name="org.eclipse.paho.android.service.MqttService"/><!--后台服务,保证Activity被结束时,MQTT不会被断开-->
  </application>
    

1.创建SimpleMqttHelper类,简化MQTT客户端的连接,订阅,发布,断开等操作

//brokeUrl是代理地址,clientId是客户端的标识
class SimpleMqttHelper(brokerUrl:String,clientId:String) {
   private val client=MqttClient(brokerUrl,clientId,null)

    fun connect(userName:String,password:String){
        val options=MqttConnectOptions()//用于配置客户端连接到代理时的各种选项
        options.userName=userName
        options.password=password.toCharArray()//密码要转成字节数组
        client.connect(options)
    }

    fun subscribe(topic:String,qos:Int=1){
        client.subscribe(topic,qos)
    }

    //retained:是否保留消息,默认值为 false。
如果设置为 true,消息会被代理保留,新订阅的客户端会收到最近一次保留的消息。
    fun publish(topic:String,msg:String,qos: Int=1,retained:Boolean=false){
        val message=MqttMessage(msg.toByteArray())
        message.qos=qos
        message.isRetained=retained
        client.publish(topic,message)
    }

    fun setCallback(callback:MqttCallback){
        client.setCallback(callback)
    }
    fun disconnect(){
        client.disconnect()
    }
}

2.创建SimpleMqttHelper的实例,调用其中方法

 val mqttHelper=SimpleMqttHelper("tcp://broker.emqx.io:1883","kotlin_client")
        mqttHelper.setCallback(object :MqttCallback{
            override fun messageArrived(topic: String?, message: MqttMessage?) {
                Log.d(TAG,"收到消息: ${message.toString()} from $topic")
            }

            override fun connectionLost(cause: Throwable?) {

            }

            override fun deliveryComplete(token: IMqttDeliveryToken?) {

            }
        })
        binding.connect.setOnClickListener { mqttHelper.connect("emqx","public") }
        binding.subscribe.setOnClickListener { mqttHelper.subscribe("a/b",0) }
binding.publish.setOnClickListener { mqttHelper.publish("a/b","hello") }
    }

更多关于HarmonyOS 鸿蒙Next轻量级网络传输协议MQTT的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

MQTT是专为鸿蒙Next设计的轻量级物联网消息传输协议,基于发布/订阅模式运行。它通过TCP/IP实现设备间高效通信,支持QoS等级保证消息可靠性。鸿蒙Next对MQTT进行了深度优化,提供原生API接口,集成安全传输机制(TLS/SSL),并适配分布式设备协同场景。协议头压缩和低功耗特性使其特别适合资源受限的IoT设备,可通过系统内置的@ohos.net.mqtt模块直接调用。

更多关于HarmonyOS 鸿蒙Next轻量级网络传输协议MQTT的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中集成MQTT协议进行轻量级网络传输是可行的,但需要注意平台差异。HarmonyOS Next使用ArkTS作为主要开发语言,而非Kotlin,因此依赖和代码实现需要调整。

建议使用华为提供的MQTT客户端库或兼容的第三方库,例如通过ohpm(OpenHarmony包管理器)引入。权限声明需遵循HarmonyOS的配置文件格式(module.json5),而非Android的AndroidManifest.xml。例如,网络权限应配置为ohos.permission.INTERNET

核心操作(连接、订阅、发布)的逻辑类似,但API调用需适配HarmonyOS的异步任务管理和生命周期。确保在UI线程外处理网络操作,避免阻塞。此外,利用HarmonyOS的分布式能力可以优化设备间MQTT通信的效率。

总体而言,MQTT在HarmonyOS Next上仍保持其轻量级和高效特性,适合物联网场景,但需注意平台特定的实现细节。

回到顶部