【OpenHarmony】文件数据与传输:ohos_mqtt

152 阅读13分钟

介绍

使应用程序能够连接到MQTT代理以发布消息、订阅主题和接收发布的消息。

下载安装

ohpm install @ohos/mqtt
  • @ohos/mqtt包已开启ssl功能、已支持sslVersion参数。

源码下载

本项目依赖paho.mqtt.c库和third_party_bounds_checking_function库,通过git submodule引入,下载代码时需加上--recursive参数。

  git clone --recursive https://gitee.com/openharmony-tpc/ohos_mqtt.git

如需使用sslVersion参数去设置SSL/TLS上下文支持的TLS版本,进入到ohos_Mqtt\src\main\cpp\paho.mqtt.c 目录下,执行 modify.sh 脚本,将本目录下的 patch 文件合入到 paho.mqtt.c 源码中。

X86模拟器配置

使用说明

    import { MqttAsync } from '@ohos/mqtt';
    // or
    // import { MqttClient } from '@ohos/mqtt';

Demo运行说明

mqtt使用依赖mqtt broker,请使用云服务或自行搭建,将 emqxPage.ets 文件中的如下参数改成对应的值,才能正常运行demo。

    // Set Client Configuration
@State topic: string = '';
@State payload: string = '';
@State url: string = '';
@State clientId: string = '';
@State userName: string = "";
@State password: string = "";

将xts中的domain:port替换成正确的域名与端口,才能正常运行xts.

openssl依赖

编译ohos_mqtt源码时如果想要开启ssl功能,需要自行编译openssl,openssl集成到应用hap

1.修改编译之前需要在交叉编译中支持编译x86_64架构,可以参考adpater_architecture.md文档。

2.编译之前需要先修改HPKBUILD文件中openssl的版本号以及清除MAKE环境变量

pkgver=OpenSSL_1_1_1t 
//修改为
pkgver=openssl-3.4.0

patchflag=true
//修改为
patchflag=false

prepare() {
  if $patchflag
//修改为
prepare() {
  unset MAKE #清除MAKE环境变量
  if $patchflag

3.下载openssl的3.4.0版本,执行以下命令获取对应的sha512值,替换SHA512SUM文件的内容。

sha512num openssl-openssl-3.4.0.tar.gz

4.在cpp目录下新增thirdparty目录,并将编译生成的库拷贝到该目录下

5.在cpp/paho.mqtt.c/CMakeList.txt中添加如下语句

#开启ssl
add_definitions(-DOPENSSL)
#将三方库加入工程中
target_link_libraries(pahomqttc PRIVATE ${NATIVERENDER_ROOT_PATH}/thirdparty/openssl/${OHOS_ARCH}/lib/libssl.a)
target_link_libraries(pahomqttc PRIVATE ${NATIVERENDER_ROOT_PATH}/thirdparty/openssl/${OHOS_ARCH}/lib/libcrypto.a)

#将三方库的头文件加入工程中
target_include_directories(pahomqttc PRIVATE ${NATIVERENDER_ROOT_PATH}/thirdparty/openssl/${OHOS_ARCH}/include)

接口说明

MqttClient

new MqttClient(options: MqttAsyncClientOptions): MqttClient

创建mqtt客户端。

参数:

参数名类型必填说明
optionsMqttAsyncClientOptions客户端参数

返回值:

类型说明
MqttClientmqtt客户端,里面包括connect,publish等方法

示例:

    this.mqttAsyncClient = new MqttClient({
        url: "ip:port",
        clientId: "e5fatos4jh3l79lndb0bs",
        persistenceType: 1,
    })

createMqtt

createMqtt(options: MqttAsyncClientOptions): MqttClient

创建mqtt客户端。

参数:

参数名类型必填说明
optionsMqttAsyncClientOptions客户端参数

返回值:

类型说明
MqttClientmqtt客户端,里面包括connect,publish等方法

示例:

    this.mqttAsyncClient = MqttAsync.createMqtt({
        url: "ip:port",
        clientId: "e5fatos4jh3l79lndb0bs",
        persistenceType: 1,
    })

connect

connect(options: MqttConnectOptions, callback: AsyncCallback): void

连接mqtt服务器。

参数:

参数名类型必填说明
optionsMqttConnectOptions参考MqttConnectOptions
callbackAsyncCallback< MqttResponse >回调函数

示例1:


    let options: MqttConnectOptions = {
        //set userName and password
        userName: "",
        password: "",
        connectTimeout: 30,
        version: 0,
    };
    this.mqttAsyncClient.connect(options, (err: Error, data: MqttResponse) => {
        // to do Something
    });

示例2:

连接ssl端口


    let options: MqttConnectOptions = {
        //set userName and password
        userName: "",
        password: "",
        connectTimeout: 30,
        version: 0,
        // If connecting to an SSL port, the following parameters need to be configured
        sslOptions: {
          // true: enable server certificate authentication, false: disable,default is true.
          enableServerCertAuth: true,
          // Sandbox path for CA certificate
          // If enableServerCertAuth is true, a CA certificate needs to be passed
          // If enableServerCertAuth is false, a CA certificate does not need to be passed
          // trustStore default value is "/etc/ssl/certs/cacert.pem"
          trustStore: fileDir + "/ca.crt"
        }
    };
    this.mqttAsyncClient.connect(options, (err: Error, data: MqttResponse) => {
        // to do Something
    });

connect

connect(options: MqttConnectOptions): Promise

连接mqtt服务器。

参数:

参数名类型必填说明
optionsMqttConnectOptions参考MqttConnectOptions

返回值:

类型说明
Promise<MqttResponse>以Promise形式返回发起连接的结果。

示例:


    let options: MqttConnectOptions = {
        //set userName and password
        userName: "",
        password: "",
        connectTimeout: 30,
        version: 0,
    };
    this.mqttAsyncClient.connect(options).then((data: MqttResponse) => {
        console.log("mqtt connect success "+ JSON.stringify(data));
    }).catch((err: MqttResponse) => {
        console.log("mqtt connect fail"+JSON.stringify(err))
    })

    try{
        let result: MqttResponse = await this.mqttAsyncClient.connect(options)
        console.log("mqtt connect success "+ JSON.stringify(result));
    }catch(err){
        console.log("mqtt connect fail "+ JSON.stringify(err));
    }

示例2:

连接ssl端口


    let options: MqttConnectOptions = {
        //set userName and password
        userName: "",
        password: "",
        connectTimeout: 30,
        version: 0,
        // If connecting to an SSL port, the following parameters need to be configured
        sslOptions: {
          // true: enable server certificate authentication, false: disable,default is true.
          enableServerCertAuth: true,
          // Sandbox path for CA certificate
          // If enableServerCertAuth is true, a CA certificate needs to be passed
          // If enableServerCertAuth is false, a CA certificate does not need to be passed
          trustStore: fileDir + "/ca.crt"
        }
    };
    this.mqttAsyncClient.connect(options).then((data: MqttResponse) => {
      console.log("mqtt connect success "+ JSON.stringify(data));
    }).catch((err: MqttResponse) => {
      console.log("mqtt connect fail"+JSON.stringify(err))
    })
    
    try{
      let result: MqttResponse = await this.mqttAsyncClient.connect(options)
      console.log("mqtt connect success "+ JSON.stringify(result));
    }catch(err){
      console.log("mqtt connect fail "+ JSON.stringify(err));
    }

publish

publish(options: MqttPublishOptions, callback: AsyncCallback): void

发布消息。

参数:

参数名类型必填说明
optionsMqttPublishOptions参考MqttPublishOptions
callbackAsyncCallback< MqttResponse >回调函数

示例:

    let publishOption: MqttPublishOptions = {
        topic: "domotopic",
        qos: 1,
        payload: "haishangdebing",
    }
    this.mqttAsyncClient.publish(publishOption, (err: Error, data: MqttResponse) => {
        // to do Something
    });

publish

publish(options: MqttPublishOptions): Promise

发布消息。

参数:

参数名类型必填说明
optionsMqttPublishOptions参考MqttPublishOptions

返回值:

类型说明
Promise<MqttResponse>以Promise形式返回发布的结果。

示例:

    let publishOption: MqttPublishOptions = {
        topic: "domotopic",
        qos: 1,
        payload: "haishangdebing",
    }
    this.mqttAsyncClient.publish(publishOption, (data: MqttResponse) => {
        console.log("mqtt publish success "+ JSON.stringify(data));
    }).catch((err: MqttResponse) => {
        console.log("mqtt publish fail "+ JSON.stringify(err));
    })

    try{
        let result: MqttResponse = await this.mqttAsyncClient.publish(publishOption)
        console.log("mqtt publish success "+ JSON.stringify(result));
    }catch(err){
        console.log("mqtt publish fail "+ JSON.stringify(err));
    }

subscribe

subscribe(options: MqttSubscribeOptions, callback: AsyncCallback): void

订阅主题。

参数:

参数名类型必填说明
optionsMqttSubscribeOptions参考MqttSubscribeOptions
callbackAsyncCallback< MqttResponse >回调函数

示例:

    let subscribeOption: MqttSubscribeOptions = {
        topic: "domotopic",
        qos: 2
    }
    this.mqttAsyncClient.subscribe(subscribeOption, (err: Error, data: MqttResponse) => {
        // to do Something
    });

subscribe

subscribe(options: MqttSubscribeOptions): Promise

订阅主题。

参数:

参数名类型必填说明
optionsMqttSubscribeOptions参考MqttSubscribeOptions

返回值:

类型说明
Promise<MqttResponse>以Promise形式返回订阅的结果。

示例:

    let subscribeOption: MqttSubscribeOptions = {
        topic: "domotopic",
        qos: 2
    }
    this.mqttAsyncClient.subscribe(subscribeOption).then((data: MqttResponse) => {
        console.log("mqtt subscribe success "+ JSON.stringify(result));
    }).catch((err: MqttResponse) => {
        console.log("mqtt subscribe fail "+ JSON.stringify(err));
    })

    try{
        let result: MqttResponse = await this.mqttAsyncClient.subscribe(subscribeOption)
        console.log("mqtt subscribe success "+ JSON.stringify(result));
    }catch(err){
        console.log("mqtt subscribe fail "+ JSON.stringify(err));
    }

subscribeMany

订阅多个主题

subscribeMany(options: MqttSubscribeOptions[]): Promise

参数:

参数名类型必填说明
optionsMqttSubscribeOptions[]参考MqttSubscribeOptions

返回值:

类型说明
Promise<MqttResponse>以Promise形式返回订阅的结果。

示例:

    let subscribeOption: MqttSubscribeOptions = {
        topic: "domotopic",
        qos: 2
    }
    
    let subscribeOption1: MqttSubscribeOptions = {
      topic: "domotopic1",
      qos: 2
    }
    
    let subscribeOption2: MqttSubscribeOptions = {
      topic: "domotopic2",
      qos: 2
    }
    this.mqttAsyncClient.subscribeMany([subscribeOption, subscribeOption1, subscribeOption2]).then((data: MqttResponse) => {
        console.log("mqtt subscribeMany success "+ JSON.stringify(result));
    }).catch((err: MqttResponse) => {
        console.log("mqtt subscribeMany fail "+ JSON.stringify(err));
    })

    try{
        let result: MqttResponse = await this.mqttAsyncClient.subscribeMany([subscribeOption, subscribeOption1, subscribeOption2])
        console.log("mqtt subscribeMany success "+ JSON.stringify(result));
    }catch(err){
        console.log("mqtt subscribeMany fail "+ JSON.stringify(err));
    }

subscribeMany

订阅多个主题

subscribeMany(options: MqttSubscribeOptions[], callback: AsyncCallback): void

参数:

参数名类型必填说明
optionsMqttSubscribeOptions[]参考MqttSubscribeOptions
callbackAsyncCallback< MqttResponse >回调函数

示例:

    let subscribeOption: MqttSubscribeOptions = {
        topic: "domotopic",
        qos: 2
    }
    
    let subscribeOption1: MqttSubscribeOptions = {
      topic: "domotopic1",
      qos: 2
    }
    
    let subscribeOption2: MqttSubscribeOptions = {
      topic: "domotopic2",
      qos: 2
    }
    this.mqttAsyncClient.subscribeMany([subscribeOption, subscribeOption1, subscribeOption2], (err: Error, data: MqttResponse) => {
        // to do Something
    });

unsubscribe

unsubscribe(options: MqttSubscribeOptions, callback: AsyncCallback): void

取消订阅。

参数:

参数名类型必填说明
optionsMqttSubscribeOptions参考MqttSubscribeOptions
callbackAsyncCallback< MqttResponse >回调函数

示例:

    let subscribeOption: MqttSubscribeOptions = {
        topic: "domotopic",
        qos: 2
    }
    this.mqttAsyncClient.unsubscribe(subscribeOption, (err: Error, data: MqttResponse) => {
         // to do Something
    });

unsubscribe

unsubscribe(options: MqttSubscribeOptions): Promise

取消订阅。

参数:

参数名类型必填说明
optionsMqttSubscribeOptions参考MqttSubscribeOptions

返回值:

类型说明
Promise<MqttResponse>以Promise形式返回取消订阅的结果。

示例:

    let subscribeOption: MqttSubscribeOptions = {
        topic: "domotopic",
        qos: 2
    }
    this.mqttAsyncClient.unsubscribe(subscribeOption).then((data: MqttResponse) => {
        console.log("mqtt unsubscribe success "+ JSON.stringify(result));
    }).catch((err: MqttResponse) => {
        console.log("mqtt unsubscribe fail "+ JSON.stringify(err));
    })

    try{
        let result: MqttResponse = await this.mqttAsyncClient.unsubscribe(subscribeOption)
        console.log("mqtt unsubscribe success "+ JSON.stringify(result));
    }catch(err){
        console.log("mqtt unsubscribe fail "+ JSON.stringify(err));
    }

unsubscribeMany

取消多个主题的订阅

unsubscribeMany(options: MqttSubscribeOptions[]): Promise

参数:

参数名类型必填说明
optionsMqttSubscribeOptions[]参考MqttSubscribeOptions

返回值:

类型说明
Promise<MqttResponse>以Promise形式返回取消订阅的结果。

示例:

    let subscribeOption: MqttSubscribeOptions = {
        topic: "domotopic",
        qos: 2
    }

    let subscribeOption1: MqttSubscribeOptions = {
      topic: "domotopic1",
      qos: 2
    }
    
    let subscribeOption2: MqttSubscribeOptions = {
      topic: "domotopic2",
      qos: 2
    }
    this.mqttAsyncClient.unsubscribeMany([subscribeOption, subscribeOption1, subscribeOption2]).then((data: MqttResponse) => {
        console.log("mqtt unsubscribeMany success "+ JSON.stringify(result));
    }).catch((err: MqttResponse) => {
        console.log("mqtt unsubscribeMany fail "+ JSON.stringify(err));
    })

    try{
        let result: MqttResponse = await this.mqttAsyncClient.unsubscribeMany([subscribeOption, subscribeOption1, subscribeOption2])
        console.log("mqtt unsubscribeMany success "+ JSON.stringify(result));
    }catch(err){
        console.log("mqtt unsubscribeMany fail "+ JSON.stringify(err));
    }

unsubscribeMany

取消多个主题的订阅

unsubscribeMany(options: MqttSubscribeOptions[], callback: AsyncCallback): void

参数:

参数名类型必填说明
optionsMqttSubscribeOptions[]参考MqttSubscribeOptions
callbackAsyncCallback< MqttResponse >回调函数

示例:

    let subscribeOption: MqttSubscribeOptions = {
      topic: "domotopic",
      qos: 2
    }
    
    let subscribeOption1: MqttSubscribeOptions = {
      topic: "domotopic1",
      qos: 2
    }
    
    let subscribeOption2: MqttSubscribeOptions = {
      topic: "domotopic2",
      qos: 2
    }
    this.mqttAsyncClient.unsubscribeMany([subscribeOption, subscribeOption1, subscribeOption2], (err: Error, data: MqttResponse) => {
         // to do Something
    });

messageArrived

messageArrived(callback: AsyncCallback): void

接收消息,使用此接口后,当订阅的主题有消息发布时,会自动接收到消息。

参数:

参数名类型必填说明
callbackAsyncCallback< MqttMessage >回调函数

示例:

    this.mqttAsyncClient.messageArrived((err: Error, data: MqttMessage) => {
        // to do Something
    });

disconnect

disconnect(callback: AsyncCallback): void

断开连接。

参数:

参数名类型必填说明
callbackAsyncCallback< MqttResponse >回调函数

示例:

    this.mqttAsyncClient.disconnect((err: Error, data: MqttResponse) => {
        // to do Something
    });

disconnect

disconnect(): Promise

断开连接。

返回值:

类型说明
Promise<MqttResponse>以Promise形式返回断开连接的结果。

示例:

    this.mqttAsyncClient.disconnect().then((data: MqttResponse) => {
        console.log("mqtt disconnect success "+ JSON.stringify(result));;
    }).catch((err: MqttResponse) => {
        console.log("mqtt disconnect fail "+ JSON.stringify(err));
    })

    try{
        let result: MqttResponse = await this.mqttAsyncClient.disconnect()
        console.log("mqtt disconnect success "+ JSON.stringify(result));
    }catch(err){
        console.log("mqtt disconnect fail "+ JSON.stringify(err));
    }

connectLost

connectLost(callback: AsyncCallback): void

当被动的断开连接后的回调(比如断网),可以在回调中尝试重新连接。

参数:

参数名类型必填说明
callbackAsyncCallback< MqttResponse >回调函数

示例:

    this.mqttAsyncClient.connectLost((err: Error, data: MqttResponse) => {
        // to do Something
    });

isConnected

isConnected(): Promise

是否已连接。

返回值:

类型说明
Promise以Promise形式返回判断是否连接的结果。

示例:

    this.mqttAsyncClient.isConnected().then((data: boolean) => {
        console.log("result: "+data)
    });

    let result: boolean = await this.mqttAsyncClient.isConnected() //true or false

reconnect

reconnect(): Promise

重新连接(必须之前连接过)。

返回值:

类型说明
Promise以Promise形式返回重连的的结果。

示例:

    this.mqttAsyncClient.reconnect().then((data: boolean) => {
        console.log('result: ' + data)
    });

    let result: boolean = await this.mqttAsyncClient.reconnect() //true or false

DD一下:欢迎大家关注工粽号<程序猿百晓生>,可以了解到以下知识点。

欢迎大家关注工粽号<程序猿百晓生>,0取以下学习清单:
1.OpenHarmony开发基础
2.OpenHarmony北向开发环境搭建
3.鸿蒙南向开发环境的搭建
4.鸿蒙生态应用开发白皮书V2.0 & V3.0
5.鸿蒙开发面试真题(含参考答案) 
6.TypeScript入门学习手册
7.OpenHarmony 经典面试题(含参考答案)
8.OpenHarmony设备开发入门【最新版】
9.沉浸式剖析OpenHarmony源代码
10.系统定制指南
11.【OpenHarmony】Uboot 驱动加载流程
12.OpenHarmony构建系统--GN与子系统、部件、模块详解
13.ohos开机init启动流程
14.鸿蒙版性能优化指南
.......

destroy

destroy(): Promise

销毁客户端。

返回值:

类型说明
Promise以Promise形式返回销毁的结果。

示例:

    this.mqttAsyncClient.destroy().then((data: boolean) => {
        console.log('result: ' + data)
    });

    let result: boolean = await this.mqttAsyncClient.destroy() //true or false

setMqttTrace

setMqttTrace(level: MQTTASYNC_TRACE_LEVELS): void

设置hilog中跟踪信息的级别。

    this.mqttAsyncClient.setMqttTrace(6);

参数:

参数名类型必填说明
levelMQTTASYNC_TRACE_LEVELS消息跟踪级别

MQTTASYNC_TRACE_LEVELS

消息跟踪级别

名称
MQTTASYNC_TRACE_MAXIMUM1
MQTTASYNC_TRACE_MEDIUM2
MQTTASYNC_TRACE_MINIMUM3
MQTTASYNC_TRACE_PROTOCOL4
MQTTASYNC_TRACE_ERROR5
MQTTASYNC_TRACE_SEVERE6
MQTTASYNC_TRACE_FATAL7

MqttAsyncClientOptions

创建客户端可选参数的类型和可选范围

参数名类型必填说明
urlstring以null结尾的字符串,指定客户端将连接到的服务器。它采取的形式protocol://host:port.protocol必须是tcp、ssl、ws或wss。对于主机,可以指定IP地址或主机名。例如,tcp://localhost:1883
clientIdstring客户端连接到服务器时传递给服务器的客户端标识符。它是一个以空结尾的UTF-8编码字符串
persistenceTypePersistenceType客户端使用的持久性类型,0=默认值:使用默认(基于文件系统)持久性机制。1=在内存持久性中使用。2=使用特定于应用程序的持久性实现

MqttConnectOptions

客户端连接服务器可选参数的类型和可选范围

参数名类型必填默认值说明
cleanSessionbooleantrue这是一个布尔值。设置控制客户端和服务器在连接和断开连接时的行为
connectTimeoutnumber30s设置连接超时时间,默认
keepAliveIntervalnumber60s保持活动间隔
serverURIsArray客户端连接到的服务器url
retryIntervalnumber0未确认的发布请求的时间间隔
sslOptionsnumber参考sslOptions
willOptionsnumber参考willOptions
MQTTVersionnumber0设置要在连接上使用的MQTT版本, 0=默认值:从3.1.1开始,如果失败,则返回到3.1,3=仅尝试版本3.1,4=仅尝试3.1.1版本
automaticReconnectbooleanfalse是否在连接丢失的情况下自动重新连接
minRetryIntervalnumber1s以秒为单位的最小重试间隔。每次重试失败时加倍
maxRetryIntervalnumber60s以秒为单位的最大重试间隔。重试失败时,加倍在此停止
userNamestring用户名
passwordstring密码

sslOptions

ssl连接的可选参数的类型的可选的范围。

参数名类型必填默认值说明
enableServerCertAuthbooleantrue是否启用服务器证书身份验证
verifybooleanfalse是否验证主机名
caPathstringNULL如果CApath不为NULL,则它指向包含PEM格式的CA证书的目录
trustStorestring系统证书:"/etc/ssl/certs/cacert.pem"PEM格式的文件,其中包含客户端信任的公共数字证书。它必须在设备中设置本地文件路径,并且必须可以访问该文件。
keyStorestringNULLPEM格式的文件,包含客户端的公共证书链。它还可能包括客户端的私钥。它必须在设备中设置本地文件路径,并且必须可以访问该文件
privateKeystringNULL如果未包含在sslKeyStore中,则此设置指向PEM格式的文件,该文件包含客户端的私钥。它必须在设备中设置本地文件路径,并且必须可以访问该文件。
privateKeyPasswordstringNULL如果加密,则加载客户端私钥的密码
enabledCipherSuitesstring“ALL”客户端将在SSL握手期间呈现给服务器的密码套件列表。如果忽略此设置,其默认值将为“ALL”,即,将考虑所有密码套件,不包括不提供加密的套件
sslVersionMQTT_SSL_VERSION0设置SSL/TLS上下文支持的TLS版本

MQTT_SSL_VERSION

TLS版本

名称
MQTT_SSL_VERSION_DEFAULT0
MQTT_SSL_VERSION_TLS_1_01
MQTT_SSL_VERSION_TLS_1_12
MQTT_SSL_VERSION_TLS_1_23

willOptions

定义客户机的MQTT“Last Will and Testament”(LWT)设置。如果客户端意外断开与服务器的连接,服务器将代表客户端将LWT消息发布到LWT主题。这允许别的客户端(订阅了LWT主题)知道客户端已断开连接。

参数名类型必填默认值说明
topicNamestring主题名称
messagestring发布的消息
retainedbooleanflase是否保留此消息
qosQoS0LWT消息的服务质量设置

MqttSubscribeOptions

发布消息可选参数类型的可选范围

参数名类型必填默认值说明
topicstring主题名称
qosQoS0消息的服务质量设置 。

MqttPublishOptions

订阅主题的可选参数类型和可选范围

参数名类型必填默认值说明
topicstring主题名称
payloadstring可选发布的消息
payloadBinaryArrayBuffer可选发布的消息
qosQoS消息的服务质量设置
retainedbooleanflase是否保留此消息
dupbooleanflase此消息是否重复,它仅在接收QoS1消息时才有意义
msgidnumber0消息标识符保留供MQTT客户机和服务器内部使用

MqttResponse

mqtt接口的返回值类型

参数名类型必填说明
messagestring返回接口调用信息 ,成功或失败
codenumber如果返回值0,则操作成功。

MqttMessage

messageArrived接口的返回类型

参数名类型必填说明
topicstring主题名称
payloadstring可选发布的消息
payloadBinaryArrayBuffer可选发布的消息
qosQoS消息的服务质量设置
retainednumber是否保留此消息
dupnumber此消息是否重复,它仅在接收QoS1消息时才有意义
msgidnumber消息标识符保留供MQTT客户机和服务器内部使用

约束与限制

在下述版本验证通过:

  • DevEco Studio: NEXT Beta1-5.0.3.806, SDK: API12 Release (5.0.0.66)
  • DevEco Studio: DevEco Studio NEXT Developer Beta1-5.0.3.331 SDK: API12 (5.0.0.25(SP6))

目录结构

|----ohos_mqtt  
|     |---- entry  # 示例代码文件夹
|     |---- ohos_Mqtt  # ohos_Mqtt库文件夹
|                |---- cpp # c/c++和napi代码
|                      |---- mqtt_napi # mqtt的napi逻辑代码
|                      |---- CMakeLists.txt  # 构建脚本
|                      |---- boundscheck # 子模块third_party_bounds_checking_function
|                      |---- paho.mqtt.c # 子模块paho.mqtt.c
|                |---- ets # 接口声明
|           |---- index.ets  # 对外接口
|     |---- README.md  # 安装使用方法          
|     |---- README_zh.md  # 安装使用方法