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

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

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

一、MQTT

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

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

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

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

MQTTAsync_setCallbacks中,

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

另外,就是一些函數(shù)執(zhí)行是否成功的回調(diào)函數(shù),C語言封裝回調(diào)之后,就是這么寫法,看起來有些變扭。有興趣的可以看《淺談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ù)中傳進來的值在內(nèi)存中拷貝一份再操作,筆者當時開發(fā)時,就是因為這樣的問題,折騰了較長時間,后來在wireshark中發(fā)現(xiàn)數(shù)據(jù)包中根本沒有內(nèi)容,才知道是由于函數(shù)參數(shù)是指針形式,直接在異步中使用可能會發(fā)生一些未知的錯誤。

參考文檔:

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發(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

相關文章

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

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

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

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

    NPM(Node Package Manager)是Node.js默認的包管理器,這篇文章主要給大家介紹了關于前端包管理器npm、Yarn和pnpm的超全面比較,文中介紹的非常詳細,需要的朋友可以參考下
    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)容

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

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

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

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

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

    在Node.js中處理Promise中錯誤的示例代碼

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

    手動下載Chrome并解決puppeteer無法使用問題

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

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

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

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

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

    如何用nodejs搭建代理服務器

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

最新評論