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

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

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

一、項(xiàng)目背景

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

二、術(shù)語(yǔ)定義

2.1云平臺(tái)

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

2.2邊緣終端

  位于網(wǎng)絡(luò)邊緣的計(jì)算機(jī)設(shè)備,通過(guò)網(wǎng)絡(luò)與云平臺(tái)連接,向下連接解析儀和各類傳感器。

2.3解析儀

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

2.4傳感器

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

三、網(wǎng)絡(luò)結(jié)構(gòu)

四、代碼實(shí)現(xiàn)

4.1 服務(wù)器實(shí)現(xiàn)

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

新建一個(gè)“server.js”

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

4.2客戶端實(shí)現(xiàn)

新建一個(gè)“client.js”

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

就目前實(shí)際使用的情況看,客戶端偶爾會(huì)自動(dòng)與服務(wù)器斷開(kāi),并且自動(dòng)連上,穩(wěn)定性方面有待驗(yà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服務(wù)器')
    //需要訂閱服務(wù)器主題,不然無(wú)法接受消息
    client.subscribe('serverMsg',{
        qos:1
    })
})
//發(fā)布客戶端消息
setInterval(()=>{
    client.publish('topic1','hello mqtt client',{
        qos:1
    })
},20000)
client.on('message',function (topic,message){
    console.log('接受服務(wù)器消息:','主題:',topic,'消息:',message.toString())
})

4.3 效果呈現(xiàn)

通過(guò)兩個(gè)定時(shí)器,實(shí)現(xiàn)了雙向通信。

服務(wù)端

客戶端

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

相關(guān)文章

  • 新手必須知的Node.js 4個(gè)JavaScript基本概念

    新手必須知的Node.js 4個(gè)JavaScript基本概念

    本文介紹了4個(gè)基本JavaScript概念,它是你學(xué)習(xí)node.js所必需要掌握,下面就讓我們來(lái)看一下具體是哪4個(gè)基本JavaScript概念
    2018-09-09
  • 如何在Linux上安裝Node.js

    如何在Linux上安裝Node.js

    這篇文章主要為大家分享了如何在你的Linux發(fā)行版上安裝Node.js?感興趣的小伙伴們可以參考一下
    2016-04-04
  • Node.js的模塊化機(jī)制和Buffer對(duì)象詳解

    Node.js的模塊化機(jī)制和Buffer對(duì)象詳解

    這篇文章主要為大家詳細(xì)介紹了Node.js的模塊化機(jī)制和Buffer對(duì)象,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • nodejs更新package.json中的dependencies依賴到最新版本的方法

    nodejs更新package.json中的dependencies依賴到最新版本的方法

    今天小編就為大家分享一篇nodejs更新package.json中的dependencies依賴到最新版本的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • Node.js安裝詳細(xì)步驟教程(Windows版)詳解

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

    這篇文章主要介紹了Node.js安裝詳細(xì)步驟教程(Windows版),本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 解決Window10系統(tǒng)下Node安裝報(bào)錯(cuò)的問(wèn)題分析

    解決Window10系統(tǒng)下Node安裝報(bào)錯(cuò)的問(wèn)題分析

    今天電腦重裝了win10系統(tǒng),在安裝Node的過(guò)程中出現(xiàn)了下面的問(wèn)題,下面就和大家分享下用來(lái)解決這種問(wèn)題的小方法
    2016-12-12
  • NodeJS使用文件流解決大文件處理的內(nèi)存與時(shí)間效率問(wèn)題

    NodeJS使用文件流解決大文件處理的內(nèi)存與時(shí)間效率問(wèn)題

    在 NodeJS 中,文件操作是常見(jiàn)的任務(wù)之一,然而,當(dāng)處理大文件時(shí),直接將整個(gè)文件加載到內(nèi)存中可能會(huì)導(dǎo)致內(nèi)存溢出或性能瓶頸,為了解決這一問(wèn)題,NodeJS 提供了文件流(Stream)機(jī)制,本文將詳細(xì)介紹文件流的優(yōu)點(diǎn)、使用方法、應(yīng)用場(chǎng)景,并探討背壓(Backpressure)的概念
    2025-01-01
  • Kubernetes Node刪除鏡像的實(shí)現(xiàn)步驟

    Kubernetes Node刪除鏡像的實(shí)現(xiàn)步驟

    本文介紹了在Kubernetes集群中如何刪除節(jié)點(diǎn)上的鏡像,包括連接節(jié)點(diǎn)、查看鏡像列表、使用Docker命令刪除鏡像以及驗(yàn)證刪除結(jié)果的步驟,感興趣的可以了解一下
    2024-09-09
  • NodeJs操作MYSQL方法詳細(xì)介紹

    NodeJs操作MYSQL方法詳細(xì)介紹

    本章將了解如何在nodejs中操作Mysql,實(shí)際項(xiàng)目中不可能用workbench來(lái)進(jìn)行增刪改查,而是用代碼操作,接下來(lái)我們講解一下如何在 nodejs中操作Mysql
    2022-08-08
  • nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比較

    nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEq

    這篇文章主要介紹了node項(xiàng)目中遇到使用斷言測(cè)試程序,看了下nodejs的api之后,對(duì)nodejs中assert斷言的幾個(gè)方法做個(gè)簡(jiǎn)單的記錄,需要的朋友可以參考下
    2017-09-09

最新評(píng)論