欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MQTT Client實(shí)現(xiàn)消息推送功能的方法詳解

 更新時(shí)間:2023年05月31日 09:05:30   作者:蒙奇·D·伊麗莎白  
這篇文章主要介紹了MQTT Client實(shí)現(xiàn)消息推送功能的方法,結(jié)合實(shí)例形式詳細(xì)分析了MQTT Client實(shí)現(xiàn)消息推送的基本原理、實(shí)現(xiàn)方法與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

一、MQTT

二、MQTT C Client實(shí)戰(zhàn)

了解更多可以閱讀《MQTT C Client for Posix and Windows》一文,下面根據(jù)官網(wǎng)資料,摘錄了幾個(gè)C語(yǔ)言實(shí)現(xiàn)MQTT的小DEMO。

MQTT使用起來(lái)也十分容易,基本上就那四五個(gè)函數(shù):MQTTClient_create(創(chuàng)建客戶端)、MQTTClient_connect(連接服務(wù)端)、MQTTClient_publishMessage(客戶端->服務(wù)端發(fā)送消息)、MQTTClient_subscribe(客戶端訂閱某個(gè)主題)等等。其中,很多異步回調(diào)函數(shù),需要自己去實(shí)現(xiàn),如,

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

MQTTAsync_setCallbacks中,

  • connlost函數(shù)指針,是當(dāng)MQTT意外斷開鏈接時(shí)會(huì)回調(diào)的函數(shù),由自己實(shí)現(xiàn);
  • msgarrvd函數(shù)指針,是當(dāng)服務(wù)器有消息推送回來(lái)時(shí),客戶端在此處接受服務(wù)端消息內(nèi)容。

另外,就是一些函數(shù)執(zhí)行是否成功的回調(diào)函數(shù),C語(yǔ)言封裝回調(diào)之后,就是這么寫法,看起來(lái)有些變扭。有興趣的可以看《淺談C/C++回調(diào)函數(shù)(Callback)& 函數(shù)指針》文章,再了解以下回調(diào)函數(shù)。

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

最后,不得不說的就是,MQTT有些發(fā)送或者是訂閱的內(nèi)容時(shí)(某些函數(shù)中),在編程最好將參數(shù)中傳進(jìn)來(lái)的值在內(nèi)存中拷貝一份再操作,筆者當(dāng)時(shí)開發(fā)時(shí),就是因?yàn)檫@樣的問題,折騰了較長(zhǎng)時(shí)間,后來(lái)在wireshark中發(fā)現(xiàn)數(shù)據(jù)包中根本沒有內(nèi)容,才知道是由于函數(shù)參數(shù)是指針形式,直接在異步中使用可能會(huì)發(fā)生一些未知的錯(cuò)誤。

參考文檔:

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())
})

補(bǔ)充:nodejs發(fā)送訂閱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/#','需要發(fā)送的信息');
    client.subscribe('wks/cim/ASPY/#')
})
client.on('message',function(topic,msg){
    console.log('收到'+topic+"訊息:"+msg.toString());
})

參考文檔:

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

相關(guān)文章

  • nodejs不用electron實(shí)現(xiàn)打開文件資源管理器并選擇文件

    nodejs不用electron實(shí)現(xiàn)打開文件資源管理器并選擇文件

    最近在開發(fā)一些小腳本,用 nodejs 實(shí)現(xiàn),其中很多功能需要選擇一個(gè)/多個(gè)文件,或者是選擇一個(gè)文件夾,這種情況下網(wǎng)上給出的解決方案都是 electron,但是我一個(gè)小腳本用 electron 屬實(shí)有點(diǎn)夸張了,后來(lái)轉(zhuǎn)念一想可以通過 powershell 來(lái)實(shí)現(xiàn)類似的功能,需要的朋友可以參考下
    2024-01-01
  • 前端包管理器npm、Yarn和pnpm的超全面比較

    前端包管理器npm、Yarn和pnpm的超全面比較

    NPM(Node Package Manager)是Node.js默認(rèn)的包管理器,這篇文章主要給大家介紹了關(guān)于前端包管理器npm、Yarn和pnpm的超全面比較,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • Linux系統(tǒng)中利用node.js提取Word(doc/docx)及PDF文本的內(nèi)容

    Linux系統(tǒng)中利用node.js提取Word(doc/docx)及PDF文本的內(nèi)容

    這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)中利用node.js提取Word(doc/docx)及PDF文本的內(nèi)容,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面跟著小編來(lái)一起看看吧。
    2017-06-06
  • nodejs文件操作模塊FS(File System)常用函數(shù)簡(jiǎn)明總結(jié)

    nodejs文件操作模塊FS(File System)常用函數(shù)簡(jiǎn)明總結(jié)

    這篇文章主要介紹了nodejs文件操作模塊FS(File System)常用函數(shù)簡(jiǎn)明總結(jié),對(duì)FS模塊的大部份異步函數(shù)做了介紹,而且用中文注釋,這下用起來(lái)方便了,需要的朋友可以參考下
    2014-06-06
  • Node.js安裝詳細(xì)步驟教程(Windows版)詳解

    Node.js安裝詳細(xì)步驟教程(Windows版)詳解

    這篇文章主要介紹了Node.js安裝詳細(xì)步驟教程(Windows版),本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 在Node.js中處理Promise中錯(cuò)誤的示例代碼

    在Node.js中處理Promise中錯(cuò)誤的示例代碼

    在現(xiàn)代JavaScript開發(fā)中,尤其在Node.js環(huán)境中,Promise已成為處理異步操作的重要方式,然而,Promise的錯(cuò)誤處理卻常常讓開發(fā)者感到困惑,在這篇文章中,我們將深入探討如何在Node.js中處理Promise中的錯(cuò)誤,提供多個(gè)示例代碼,以便于理解和實(shí)踐,需要的朋友可以參考下
    2024-09-09
  • 手動(dòng)下載Chrome并解決puppeteer無(wú)法使用問題

    手動(dòng)下載Chrome并解決puppeteer無(wú)法使用問題

    本篇文章主要介紹了手動(dòng)下載Chrome并解決puppeteer無(wú)法使用問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2018-11-11
  • Node.js中常用文件系統(tǒng)操作的示例詳解

    Node.js中常用文件系統(tǒng)操作的示例詳解

    這篇文章將深入探討?Node.js?中的文件系統(tǒng)(fs)模塊,它是?Node.js?中進(jìn)行文件讀寫的核心模塊,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • npm包發(fā)布和刪除的超詳細(xì)教程

    npm包發(fā)布和刪除的超詳細(xì)教程

    npm是JavaScript的包管理器,也是世界上最大的軟件注冊(cè)中心,下面這篇文章主要給大家介紹了關(guān)于npm包發(fā)布和刪除的超詳細(xì)教程,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • 如何用nodejs搭建代理服務(wù)器

    如何用nodejs搭建代理服務(wù)器

    這篇文章主要介紹了如何用nodejs搭建代理服務(wù)器,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08

最新評(píng)論