0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Node搭建本地MQTT服務(wù)器

信盈達(dá) ? 2022-05-26 14:11 ? 次閱讀

2d616c00-da9b-11ec-b80f-dac502259ad0.png

大家好,我是牛牛。今天給分享一下使用Node搭建MQTT服務(wù)端的流程,主要包含以下幾部分內(nèi)容:

MQTT介紹

MQTT基本原理及相關(guān)概念

Node搭建MQTT


一、MQTT介紹


MQTT 是一種基于發(fā)布/訂閱模式的輕量級(jí)物聯(lián)網(wǎng)消息傳輸協(xié)議 ,可以用極少的代碼和帶寬為聯(lián)網(wǎng)設(shè)備提供實(shí)時(shí)可靠的消息服務(wù),它廣泛應(yīng)用于物聯(lián)網(wǎng)、移動(dòng)互聯(lián)網(wǎng)、智能硬件、車聯(lián)網(wǎng)、電力能源等行業(yè)。


MQTT主要有以下幾個(gè)特點(diǎn)(來(lái)自百度和MQTT中文網(wǎng)):

使用發(fā)布/訂閱消息模式,一對(duì)多的消息發(fā)布

開發(fā)消息協(xié)議,易于實(shí)現(xiàn)

1字節(jié)固定頭,2字節(jié)報(bào)文,開銷小

基于TCP/IP協(xié)議族,提供有序,無(wú)損,雙向鏈接

與HTTP之類的協(xié)議相比,MQTT在通過網(wǎng)絡(luò)傳輸數(shù)據(jù)時(shí)表現(xiàn)出眾。另一個(gè)重要特點(diǎn)是易于在客戶端實(shí)現(xiàn)。

二、MQTT基本原理與相關(guān)概念

1.1 MQTT基本原理

在MQTT協(xié)議通訊中,有兩個(gè)最為重要的角色。它們分別是服務(wù)端和客戶端。

1、 MQTT服務(wù)端

MQTT服務(wù)端通常是一臺(tái)服務(wù)器。它是MQTT信息傳輸?shù)臉屑~,負(fù)責(zé)將MQTT客戶端發(fā)送來(lái)的信息傳遞給MQTT客戶端。MQTT服務(wù)端還負(fù)責(zé)管理MQTT客戶端。確??蛻舳酥g的通訊順暢,保證MQTT消息得以正確接受和正確投遞。

2、 MQTT客戶端

MQTT客戶端可以向服務(wù)端發(fā)布信息,也可以從服務(wù)端收取信息。把客戶端發(fā)送信息的行為稱為“發(fā)布”信息。而客戶端要想從服務(wù)端收取信息,則首先要向服務(wù)端“訂閱信息”。


1.2MQTT主題

MQTT服務(wù)端在管理MQTT信息通訊時(shí),就是使用“主題”來(lái)控制的。

1.3MQTT發(fā)布與訂閱特性

MQTT通訊的核心樞紐是MQTT服務(wù)端。有了服務(wù)端對(duì)MQTT信息的接、儲(chǔ)存、處理和發(fā)送,客戶端在發(fā)送和訂閱消息時(shí),可以相互獨(dú)立,且在空間上可以分離,時(shí)間上可以異步。


三、Node搭建MQTT服務(wù)器

node安裝:

https://www.runoob.com/nodejs/nodejs-install-setup.html

3.1 安裝模塊

安裝所需要的MQTT模塊

可以使用mosca也可以使用依賴較小的adedes

https://www.npmjs.com/package/aedes

npm install aedes --save

如果下載慢指定鏡像源后再次執(zhí)行安裝:

npm config set registry https://registry.npm.taobao.org

3.2開啟服務(wù)端

服務(wù)器node端,新建index.js

// 引入模塊var aedes = require('aedes')();
//創(chuàng)建服務(wù)var server = require('net').createServer(aedes.handle);
// 監(jiān)聽客戶端連接aedes.on('client',(client)=>{ console.log("客戶端連接,clientId:"+client.id)})
// 監(jiān)聽客戶端斷開aedes.on('clientDisconnect',(client)=>{ console.log("客戶端斷開連接,clientId:"+client.id)})
//監(jiān)聽端口server.listen(1883,()=>{ console.log('[ Server ] server listening on port:1883');})

默認(rèn)服務(wù)器ip地址為127.0.0.1,也可以自己指定。


運(yùn)行服務(wù)端:

node index.js

使用MQTT.fx工具進(jìn)行測(cè)試服務(wù)端連接:

2d9b32d2-da9b-11ec-b80f-dac502259ad0.png

點(diǎn)擊 Connect可以看到右側(cè)圖標(biāo)變綠,則代表連接成功。

2de20590-da9b-11ec-b80f-dac502259ad0.png

同時(shí)服務(wù)端會(huì)顯示,連接的客戶端的id

2e5677d6-da9b-11ec-b80f-dac502259ad0.png

點(diǎn)擊 Disconnect可以看到右側(cè)圖標(biāo)變灰,則代表斷開成功。

2e9269ee-da9b-11ec-b80f-dac502259ad0.png

同時(shí)在服務(wù)端可以看到斷開連接的客戶端id

2ecc96b4-da9b-11ec-b80f-dac502259ad0.png

到目前為止,還沒有添加身份認(rèn)證,也就代碼只要用戶知道服務(wù)端的ip和端口號(hào)都可以連接進(jìn)來(lái),如果需要考慮安全性,則可以添加身份驗(yàn)證。

3.3 添加身份驗(yàn)證

使用aedes.authenticate添加身份驗(yàn)證

2efdd6d4-da9b-11ec-b80f-dac502259ad0.png


// 身份驗(yàn)證aedes.authenticate = function (client, username, password, callback) { callback(null, username === "xydadmin" && password.toString()==="123456")}

添加驗(yàn)證后嘗試連接,報(bào)錯(cuò):

2f5385c0-da9b-11ec-b80f-dac502259ad0.png

在配置中添加用戶名和密碼,嘗試重連

2f89ced2-da9b-11ec-b80f-dac502259ad0.png


2ff496cc-da9b-11ec-b80f-dac502259ad0.png

3.4消息訂閱與消息發(fā)布

添加消息訂閱

// 設(shè)置訂閱aedes.on('subscribe', function (subscriptions, client) {
if (client) { // subscriptions 訂閱主題列表,一般一次訂閱一個(gè) console.log('[ Subscribe ] SubscripTions:'+subscriptions[0].topic,' Qos:'+subscriptions[0].qos,' CilentID:'+client.id); }});

添加消息發(fā)布

// 設(shè)置發(fā)布aedes.on('publish',function(packet,client) { if (client) { // packet為發(fā)布的信息 console.log('[ Publish ] CilentID:'+client.id,' Qos:'+packet.qos,' Data:[ '+String(packet.payload),' ]'); }});

取消訂閱

//取消訂閱aedes.on('unsubscribe',function(unsubscriptions,client){ if(client){ console.log('[ unSubscribe ] unSubscripTions:'+unsubscriptions[0],' CilentID:'+client.id); }});

消息的發(fā)布與訂閱測(cè)試,目前是發(fā)布和訂閱使用相同的topic,在發(fā)布topic處設(shè)置發(fā)送內(nèi)容,客戶端訂閱了topic則可以接收到該發(fā)布topic的信息。

3.5MQTT.fx測(cè)試消息的發(fā)布和訂閱

訂閱topic:/login

302e45fc-da9b-11ec-b80f-dac502259ad0.png

發(fā)布topic:/login

3061bebe-da9b-11ec-b80f-dac502259ad0.png

查看訂閱topic處,即可看到發(fā)送的內(nèi)容。

30872d70-da9b-11ec-b80f-dac502259ad0.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8977

    瀏覽量

    85100
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    搭建海外云服務(wù)器需要什么費(fèi)用?

    搭建海外云服務(wù)器的費(fèi)用涉及多個(gè)方面,包括服務(wù)器實(shí)例費(fèi)用、公網(wǎng)帶寬費(fèi)用、磁盤存儲(chǔ)費(fèi)用、操作系統(tǒng)費(fèi)用和其他費(fèi)用。具體費(fèi)用取決于所選的云服務(wù)提供商、服務(wù)器
    的頭像 發(fā)表于 10-29 10:55 ?94次閱讀

    Kubernetes集群搭建容器云需要幾臺(tái)服務(wù)器?

    Kubernetes集群搭建容器云需要幾臺(tái)服務(wù)器?至少需要4臺(tái)服務(wù)器。搭建容器云所需的服務(wù)器數(shù)量以及具體的
    的頭像 發(fā)表于 10-21 10:06 ?118次閱讀

    服務(wù)器搭建步驟

    服務(wù)器不僅提供了靈活的資源配置和強(qiáng)大的計(jì)算能力,還降低了IT基礎(chǔ)設(shè)施的維護(hù)成本。下面,rak小編帶您詳細(xì)了解云服務(wù)器搭建的步驟。
    的頭像 發(fā)表于 10-09 10:58 ?158次閱讀

    本地服務(wù)器和云服務(wù)器區(qū)別在哪里

    本地服務(wù)器依賴物理硬件,資源調(diào)配受限,成本高且擴(kuò)展不便,但數(shù)據(jù)控制力強(qiáng);而云服務(wù)器則基于虛擬化技術(shù),資源彈性調(diào)配,成本低,易于擴(kuò)展,且由云服務(wù)提供商負(fù)責(zé)維護(hù)安全和高可用性,適合快速變化
    的頭像 發(fā)表于 09-27 10:02 ?161次閱讀

    服務(wù)器搭建詳細(xì)過程

    隨著云計(jì)算技術(shù)的發(fā)展,越來(lái)越多的企業(yè)和個(gè)人開始選擇使用云服務(wù)器來(lái)部署自己的應(yīng)用和服務(wù)。相比于傳統(tǒng)的物理服務(wù)器,云服務(wù)器提供了更高的靈活性、可擴(kuò)展性和安全性。下面將詳細(xì)介紹如何
    的頭像 發(fā)表于 09-12 10:00 ?261次閱讀

    如何在服務(wù)器上調(diào)試本地FPGA板卡

    聯(lián)合開發(fā)或者跑多策略工程的時(shí)候,一般都使用多核的服務(wù)器進(jìn)行FPGA設(shè)計(jì)。這個(gè)時(shí)候如果板卡在本地電腦上應(yīng)該怎么進(jìn)行調(diào)試呢? 今天就簡(jiǎn)單講講《如何在服務(wù)器上調(diào)試本地FPGA板卡
    發(fā)表于 07-31 17:36

    使用SDK中的MQTT連接服務(wù)器,導(dǎo)致mqtt永遠(yuǎn)斷開,請(qǐng)問是什么原因?

    使用SDK中的MQTT連接服務(wù)器,由于wifi信號(hào)不好會(huì)經(jīng)常出現(xiàn)斷網(wǎng)重新連接的情況,重連次數(shù)多了以后MQTT_Connect函數(shù)中的espconn_gethostbyname返回Out of memory error,導(dǎo)致
    發(fā)表于 07-19 14:37

    NB81如何通過MQTT對(duì)接EMQX服務(wù)器?

    NB81如何通過MQTT對(duì)接EMQX服務(wù)器,有對(duì)接流程的參考文檔么
    發(fā)表于 06-04 06:02

    分享 | PTP、NTP時(shí)間同步服務(wù)器的部署與搭建過程

    分享 | PTP、NTP時(shí)間同步服務(wù)器的部署與搭建過程
    的頭像 發(fā)表于 05-15 10:01 ?881次閱讀
    分享 | PTP、NTP時(shí)間同步<b class='flag-5'>服務(wù)器</b>的部署與<b class='flag-5'>搭建</b>過程

     海外云服務(wù)器搭建pi節(jié)點(diǎn)詳細(xì)步驟

     海外云服務(wù)器搭建pi節(jié)點(diǎn)簡(jiǎn)單嗎?海外云服務(wù)器搭建pi節(jié)點(diǎn)步驟有哪些?小編為您整理發(fā)布海外云服務(wù)器搭建
    的頭像 發(fā)表于 02-21 10:16 ?1025次閱讀

    什么是本地IP?服務(wù)器本地IP有哪些優(yōu)勢(shì)?

    本地IP是指直接在互聯(lián)網(wǎng)上分配給服務(wù)器或設(shè)備的IP地址,而不是通過NAT(網(wǎng)絡(luò)地址轉(zhuǎn)換)或 代理等中間設(shè)備進(jìn)行轉(zhuǎn)發(fā)。讓我們關(guān)注本地IP的優(yōu)勢(shì)。 1.直接訪問:原始IP允許無(wú)中間設(shè)備轉(zhuǎn)發(fā)或代理直接
    的頭像 發(fā)表于 12-26 11:52 ?4687次閱讀

    【飛騰派4G版免費(fèi)試用】如何在飛騰開發(fā)板上安裝EMQX MQTT服務(wù)器

    系統(tǒng)中搭建一個(gè)單節(jié)點(diǎn)的MQTT服務(wù)器。 1. 安裝EMQX 本文演示的環(huán)境為: 硬件:飛騰派開發(fā)板,ARMV8架構(gòu) 操作系統(tǒng):Ubuntu 20.04 EMQX 安裝與運(yùn)行 下載安裝包 訪問 EMQX
    發(fā)表于 12-26 11:16

    如何利用AWFlow搭建HTTP服務(wù)器

    本文將基于EsDA開發(fā)套件快速在開發(fā)板上搭建HTTP服務(wù)器,為HTTP客戶端提供了訪問板子的外設(shè)資源,數(shù)據(jù)以及文件讀寫等接口,實(shí)現(xiàn)設(shè)備與網(wǎng)絡(luò)服務(wù)的互聯(lián)互通。項(xiàng)目簡(jiǎn)介在物聯(lián)網(wǎng)應(yīng)用中,在開發(fā)板上
    的頭像 發(fā)表于 12-14 08:24 ?545次閱讀
    如何利用AWFlow<b class='flag-5'>搭建</b>HTTP<b class='flag-5'>服務(wù)器</b>

    如何自己搭建一個(gè)服務(wù)器

    如何自己搭建一個(gè)服務(wù)器?自己搭建一個(gè)服務(wù)器涉及到硬件和軟件兩個(gè)方面。下面是一個(gè)簡(jiǎn)單的指南,涵蓋了基本的步驟。請(qǐng)注意,這是一個(gè)概述,實(shí)際步驟可能因你的需求和硬件選擇而有所不同。
    的頭像 發(fā)表于 12-12 16:52 ?3725次閱讀

    搭建ftp服務(wù)器的步驟

    搭建ftp服務(wù)器的步驟? 搭建FTP服務(wù)器是一項(xiàng)需要一定技術(shù)知識(shí)的任務(wù),但是只要按照以下步驟進(jìn)行操作,您就能成功搭建自己的FTP
    的頭像 發(fā)表于 12-07 16:32 ?1105次閱讀