MQTT Client实现消息推送功能的方法详解

 更新时间:2023年05月31日 09:05:30   作者:蒙奇·D·伊丽莎白  
这篇文章主要介绍了MQTT Client实现消息推送功能的方法,结合实例形式详细分析了MQTT Client实现消息推送的基本原理、实现方法与相关操作注意事项,需要的朋友可以参考下

一、MQTT

二、MQTT C Client实战

了解更多可以阅读《MQTT C Client for Posix and Windows》一文,下面根据官网资料,摘录了几个C语言实现MQTT的小DEMO。

MQTT使用起来也十分容易,基本上就那四五个函数:MQTTClient_create(创建客户端)、MQTTClient_connect(连接服务端)、MQTTClient_publishMessage(客户端->服务端发送消息)、MQTTClient_subscribe(客户端订阅某个主题)等等。其中,很多异步回调函数,需要自己去实现,如,

MQTTAsync_setCallbacks(mqtt->_client, mqtt->_client, connlost, msgarrvd, NULL);

MQTTAsync_setCallbacks中,

  • connlost函数指针,是当MQTT意外断开链接时会回调的函数,由自己实现;
  • msgarrvd函数指针,是当服务器有消息推送回来时,客户端在此处接受服务端消息内容。

另外,就是一些函数执行是否成功的回调函数,C语言封装回调之后,就是这么写法,看起来有些变扭。有兴趣的可以看《浅谈C/C++回调函数(Callback)& 函数指针》文章,再了解以下回调函数。

mqtt->_conn_opts.onSuccess = onConnect;
mqtt->_conn_opts.onFailure = onConnectFailure;

最后,不得不说的就是,MQTT有些发送或者是订阅的内容时(某些函数中),在编程最好将参数中传进来的值在内存中拷贝一份再操作,笔者当时开发时,就是因为这样的问题,折腾了较长时间,后来在wireshark中发现数据包中根本没有内容,才知道是由于函数参数是指针形式,直接在异步中使用可能会发生一些未知的错误。

参考文档:

https://yq.aliyun.com/articles/521549?spm=5176.10695662.1996646101.searchclickresult.39f82372vfl8ed

三、MQTT client for Node.js

Installation

#You can install it as dependency with npm.
$ # save into package.json dependencies with -S 
$ npm install aliyun-iot-mqtt -S

Usage

Aliyun IoT Hub mqtt client with authrozied by productKey & deviceName & deviceSecret.

GET Data

const Mqtt = require('aliyun-iot-mqtt');
const client = Mqtt.getAliyunIotMqttClient({
    productKey: "",
    deviceName: "",
    deviceSecret: "",
    regionId: "cn-shanghai",
    keepalive:120 // mqtt options
});
client.on('connect', function() {
    console.log("connect")
})
client.end(function (){
    console.log("end")
})

TLS mqtts

aliyun_iot_root.cer

var trustedCA = fs.readFileSync(path.join(__dirname, '/aliyun_iot_root.cer'))
var options = {
    productKey: "",
    deviceName: "",
    deviceSecret: "",
    regionId: "cn-shanghai",
    protocol: 'mqtts',
    ca: trustedCA,
    keepalive:120 // mqtt options
};

Subscribe Topic

client.subscribe(topic)

Publish Message

client.publish(topic, 'Hello mqtt')
client.publish(topic, 'Hello mqtt', { qos: 1 })

Receive Message

client.on('message', function(topic, message) {
    console.log(topic+"," + message.toString())
})

补充:nodejs发送订阅mqtt完整示例:

var mqtt = require('mqtt');
var opt={
    port:1883
}
var client=mqtt.connect('tcp://10.66.28.51',opt);
client.on('connect',function(){
    console.log("mqtt已连接");
    // client.publish('wks/cim/ASPY/#','需要发送的信息');
    client.subscribe('wks/cim/ASPY/#')
})
client.on('message',function(topic,msg){
    console.log('收到'+topic+"讯息:"+msg.toString());
})

参考文档:

https://www.npmjs.com/package/aliyun-iot-mqtt

相关文章

  • Node.js数据库操作之连接MySQL数据库(一)

    Node.js数据库操作之连接MySQL数据库(一)

    前一阵在做项目的时候,需要通过nodejs连接到MySQL数据库,于是简单地学习了一下MySQL这个库,分享一些学习心得给大家,希望对大家有帮助。下面这篇文章主要介绍了Node.js数据库操作之连接MySQL数据库的相关资料,需要的朋友可以参考下。
    2017-03-03
  • nodejs使用Sequelize框架操作数据库的实现

    nodejs使用Sequelize框架操作数据库的实现

    这篇文章主要介绍了nodejs使用Sequelize框架操作数据库的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Node.js引入UIBootstrap的方法示例

    Node.js引入UIBootstrap的方法示例

    这篇文章主要介绍了Node.js引入UIBootstrap的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 使用express+multer实现node中的图片上传功能

    使用express+multer实现node中的图片上传功能

    这篇文章主要介绍了使用express+multer实现node中的图片上传功能,需要的朋友可以参考下
    2018-02-02
  • NodeJS 基于 Dapr 构建云原生微服务应用快速入门教程

    NodeJS 基于 Dapr 构建云原生微服务应用快速入门教程

    Dapr 是一个可移植的、事件驱动的运行时,它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序,并可运行在云平台或边缘计算中,它同时也支持多种编程语言和开发框架,本文重点介绍NodeJS云原生微服务应用,感兴趣的朋友一起看看吧
    2022-07-07
  • Node.js的HTTP模块、URL模块与supervisor工具介绍

    Node.js的HTTP模块、URL模块与supervisor工具介绍

    这篇文章介绍了Node.js的HTTP模块、URL模块与supervisor工具,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • 利用nodejs读取图片并将二进制数据转换成base64格式

    利用nodejs读取图片并将二进制数据转换成base64格式

    这篇文章主要介绍了利用nodejs读取图片并将二进制数据转换成base64格式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • nvm无法安装低版本nodejs解决方案

    nvm无法安装低版本nodejs解决方案

    因nvm升级后无法安装低版本Node.js,下面这篇文章主要给大家介绍了关于nvm无法安装低版本nodejs的解决方案,关键步骤包括卸载旧版nvm、下载低版本安装包及配置环境变量,需要的朋友可以参考下
    2025-05-05
  • NodeJS如何优雅的实现Sleep休眠

    NodeJS如何优雅的实现Sleep休眠

    这篇文章主要介绍了NodeJS如何优雅的实现Sleep休眠问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • 浅谈Node.js轻量级Web框架Express4.x使用指南

    浅谈Node.js轻量级Web框架Express4.x使用指南

    本篇文章主要介绍了浅谈Node.js轻量级Web框架Express4.x使用指南,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05

最新评论