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


📚往期笔录记录🔖:

🔖鸿蒙应用开发与鸿蒙系统开发哪个更有前景?

🔖嵌入式开发适不适合做鸿蒙南向开发?看完这篇你就了解了~

🔖对于大前端开发来说,转鸿蒙开发究竟是福还是祸?

🔖鸿蒙岗位需求突增!移动端、PC端、IoT到底该怎么选?

🔖记录一场鸿蒙开发岗位面试经历~

🔖持续更新中……


介绍

使应用程序能够连接到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客户端。

参数:

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

返回值:

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

示例:

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

createMqtt

createMqtt(options: MqttAsyncClientOptions): MqttClient

创建mqtt客户端。

参数:

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

返回值:

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

示例:

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

connect

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

连接mqtt服务器。

参数:

参数名 类型 必填 说明
options MqttConnectOptions 参考MqttConnectOptions
callback AsyncCallback< 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服务器。

参数:

参数名 类型 必填 说明
options MqttConnectOptions 参考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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值