最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nodejs 實現(xiàn)MQTT協(xié)議的服務器端和客戶端的雙向交互的過程

 更新時間:2023年11月20日 09:25:22   作者:慶余年220  
這篇文章主要介紹了nodejs 實現(xiàn)MQTT協(xié)議的服務器端和客戶端的雙向交互的過程,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧

一、項目背景

  公司和第三方合作開發(fā)一個傳感器項目,想要通過電腦或者手機去控制項目現(xiàn)場的傳感器控制情況?,F(xiàn)在的最大問題在于,現(xiàn)場的邊緣終端設備接入的公網(wǎng)方式是無線接入,無法獲取固定IP,所以常規(guī)的HTTP協(xié)議通信就沒法做,現(xiàn)在打算使用MQTT來實現(xiàn)云平臺和邊緣終端(傳感器)之間的雙向通信。

二、術語定義

2.1云平臺

  主要是針對數(shù)據(jù)、設備等的管理。部署在云端的軟件應用系統(tǒng),通過與邊緣終端,實現(xiàn)數(shù)據(jù)獲取或者指令下發(fā)。

2.2邊緣終端

  位于網(wǎng)絡邊緣的計算機設備,通過網(wǎng)絡與云平臺連接,向下連接解析儀和各類傳感器。

2.3解析儀

  數(shù)據(jù)接受裝置,通過有線/無線模式,連接邊緣終端或通過有線模式接收不同來源的傳感器數(shù)據(jù)。

2.4傳感器

  通過有線/無線模式,連接邊緣終端,傳輸相應的參數(shù)或通過有線模式連接解析儀,傳輸相應的參數(shù)。

三、網(wǎng)絡結構

四、代碼實現(xiàn)

4.1 服務器實現(xiàn)

首先安裝nodejs和aedes,具體的操作和截圖網(wǎng)上有很多現(xiàn)成的。

新建一個“server.js”

const aedes = require('aedes')();
const aedesServer = require('net').createServer(aedes.handle);
const port = 1883;
aedesServer.listen(port, function () {
    console.log('服務啟動并開始監(jiān)聽端口:', port)
})
//監(jiān)聽MQTT服務器端口,當有客戶端連接上時,觸發(fā)該回調(diào)
aedes.on("client", (client) => {
    console.log("客戶端連接成功:", client.id);
})
//監(jiān)聽MQTT服務器端口,當有客戶端主動斷開連接或者服務器600s內(nèi)沒收到某個客戶端的心跳包就會觸發(fā)
aedes.on("clientDisconnect", (client) => {
    console.log("客戶端斷開連接:", client.id);
})
//監(jiān)聽客戶端發(fā)布的主題
aedes.on("publish", function (packet, client) {
    //針對不同的客戶端寫不同的邏輯
    if (client) {
        //根據(jù)主題不同寫不同的邏輯,建議采用JSON格式傳輸
        console.log("監(jiān)聽客戶端發(fā)過來的消息",packet.topic, packet.payload.toString());
    }
})
//服務器發(fā)出的消息
setInterval(() => {
    aedes.publish({
        topic: "serverMsg",
        payload: "服務器發(fā)消息",
        qos: 1,
        retain: false,
        dup: false,
        cmd: "publish"
    }, (err) => {
        if (err) {
            console.log("發(fā)布失敗");
        }
    });
}, 20000)

4.2客戶端實現(xiàn)

新建一個“client.js”

客戶端只需要使用“mqtt.connect”方法,就可以跟服務端建立長連接。

就目前實際使用的情況看,客戶端偶爾會自動與服務器斷開,并且自動連上,穩(wěn)定性方面有待驗證。

var mqtt = require('mqtt');
var client = mqtt.connect('mqtt://192.168.70.220:1883',{
    clientId:'nodejs-mqtt-client'
})
client.on('connect',function (){
    console.log('連接上MQTT服務器')
    //需要訂閱服務器主題,不然無法接受消息
    client.subscribe('serverMsg',{
        qos:1
    })
})
//發(fā)布客戶端消息
setInterval(()=>{
    client.publish('topic1','hello mqtt client',{
        qos:1
    })
},20000)
client.on('message',function (topic,message){
    console.log('接受服務器消息:','主題:',topic,'消息:',message.toString())
})

4.3 效果呈現(xiàn)

通過兩個定時器,實現(xiàn)了雙向通信。

服務端

客戶端

到此這篇關于nodejs 實現(xiàn)MQTT協(xié)議的服務器端和客戶端的雙向交互的文章就介紹到這了,更多相關nodejs MQTT協(xié)議內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • npm全局模塊卸載及默認安裝目錄修改方法

    npm全局模塊卸載及默認安裝目錄修改方法

    今天小編就為大家分享一篇npm全局模塊卸載及默認安裝目錄修改方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • node.js操作mysql簡單實例

    node.js操作mysql簡單實例

    本文給大家介紹了nodejs 連接Mysql相關操作的示例代碼,主要用到的是sql語句,都是比較基礎的。
    2017-05-05
  • Nodejs監(jiān)控事件循環(huán)異常示例詳解

    Nodejs監(jiān)控事件循環(huán)異常示例詳解

    這篇文章主要給大家介紹了關于Nodejs監(jiān)控事件循環(huán)異常的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Nodejs具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-09-09
  • PM2部署與管理Node.js項目的步驟

    PM2部署與管理Node.js項目的步驟

    使用 PM2(Process Manager 2)來部署Node.js項目是一種非常流行的方法,因為它可以幫助你管理 Node.js 應用的進程,包括啟動、停止、重啟和監(jiān)控,下面介紹如何使用PM2部署一個Node.js項目的步驟,感興趣的朋友跟隨小編一起看看吧
    2025-10-10
  • nodejs讀取本地mp3和mp4等媒體文件并播放的案例

    nodejs讀取本地mp3和mp4等媒體文件并播放的案例

    fs模塊是nodejs官方提供用來操作文件的模塊,下面這篇文章主要給大家介紹了關于nodejs讀取本地mp3和mp4等媒體文件并播放的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • 在Mac下徹底卸載node和npm的方法

    在Mac下徹底卸載node和npm的方法

    今天小編就為大家分享一篇在Mac下徹底卸載node和npm的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • node連接MySQL數(shù)據(jù)庫的3種方式總結

    node連接MySQL數(shù)據(jù)庫的3種方式總結

    現(xiàn)在前端基本上都會用一些NodeJs,想必也想自己寫一些API或者個人博客的后臺系統(tǒng),這些就離不開連接數(shù)據(jù)庫的問題,下面這篇文章主要給大家介紹了關于node連接MySQL數(shù)據(jù)庫的3種方式,需要的朋友可以參考下
    2022-08-08
  • 利用python分析access日志的方法

    利用python分析access日志的方法

    最近在自學python,光看是不行的,還是要多實操的。這就是一個寫給自己的小小工具。主要功能是,便利日志文件夾下的文件,根據(jù)設定的關鍵字查找是否有web攻擊行為。有需要的朋友們下面來一起看看吧。
    2016-10-10
  • 用npm-run實現(xiàn)自動化任務的方法示例

    用npm-run實現(xiàn)自動化任務的方法示例

    這篇文章主要介紹了用npm-run實現(xiàn)自動化任務的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • 詳解Node.js如何處理ES6模塊

    詳解Node.js如何處理ES6模塊

    學習JavaScript語言,你會發(fā)現(xiàn)它有兩種格式的模塊。一種是ES6模塊,簡稱ESM;另一種是Node.js專用的CommonJS模塊,簡稱 CJS。這兩種模塊不兼容。很多人使用Node.js,只會用require()加載模塊,遇到ES6模塊就不知道該怎么辦。本文就來談談ES6模塊在Node.js里面怎么使用。
    2021-05-05

最新評論

辽阳县| 宜黄县| 修文县| 东乌珠穆沁旗| 新竹县| 清水河县| 宁波市| 安义县| 桑植县| 泗水县| 江源县| 平潭县| 建宁县| 五家渠市| 包头市| 琼中| 灵丘县| 呼玛县| 枣庄市| 永新县| 聂拉木县| 德兴市| 柳河县| 乌海市| 江达县| 佛学| 普洱| 六盘水市| 名山县| 广东省| 鹤庆县| 庄河市| 甘孜| 白银市| 乾安县| 东乌珠穆沁旗| 仙桃市| 惠州市| 定陶县| 清新县| 鹤庆县|