精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Node搭建本地MQTT服務器

信盈達 ? 2022-05-26 14:11 ? 次閱讀

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

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

MQTT介紹

MQTT基本原理及相關概念

Node搭建MQTT


一、MQTT介紹


MQTT 是一種基于發布/訂閱模式的輕量級物聯網消息傳輸協議 ,可以用極少的代碼和帶寬為聯網設備提供實時可靠的消息服務,它廣泛應用于物聯網、移動互聯網、智能硬件、車聯網、電力能源等行業。


MQTT主要有以下幾個特點(來自百度和MQTT中文網):

使用發布/訂閱消息模式,一對多的消息發布

開發消息協議,易于實現

1字節固定頭,2字節報文,開銷小

基于TCP/IP協議族,提供有序,無損,雙向鏈接

與HTTP之類的協議相比,MQTT在通過網絡傳輸數據時表現出眾。另一個重要特點是易于在客戶端實現。

二、MQTT基本原理與相關概念

1.1 MQTT基本原理

在MQTT協議通訊中,有兩個最為重要的角色。它們分別是服務端和客戶端。

1、 MQTT服務端

MQTT服務端通常是一臺服務器。它是MQTT信息傳輸的樞紐,負責將MQTT客戶端發送來的信息傳遞給MQTT客戶端。MQTT服務端還負責管理MQTT客戶端。確保客戶端之間的通訊順暢,保證MQTT消息得以正確接受和正確投遞。

2、 MQTT客戶端

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


1.2MQTT主題

MQTT服務端在管理MQTT信息通訊時,就是使用“主題”來控制的。

1.3MQTT發布與訂閱特性

MQTT通訊的核心樞紐是MQTT服務端。有了服務端對MQTT信息的接、儲存、處理和發送,客戶端在發送和訂閱消息時,可以相互獨立,且在空間上可以分離,時間上可以異步。


三、Node搭建MQTT服務器

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

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

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

3.2開啟服務端

服務器node端,新建index.js

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

默認服務器ip地址為127.0.0.1,也可以自己指定。


運行服務端:

node index.js

使用MQTT.fx工具進行測試服務端連接:

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

點擊 Connect可以看到右側圖標變綠,則代表連接成功。

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

同時服務端會顯示,連接的客戶端的id

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

點擊 Disconnect可以看到右側圖標變灰,則代表斷開成功。

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

同時在服務端可以看到斷開連接的客戶端id

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

到目前為止,還沒有添加身份認證,也就代碼只要用戶知道服務端的ip和端口號都可以連接進來,如果需要考慮安全性,則可以添加身份驗證。

3.3 添加身份驗證

使用aedes.authenticate添加身份驗證

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


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

添加驗證后嘗試連接,報錯:

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

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

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


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

3.4消息訂閱與消息發布

添加消息訂閱

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

添加消息發布

// 設置發布aedes.on('publish',function(packet,client) { if (client) { // packet為發布的信息 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); }});

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

3.5MQTT.fx測試消息的發布和訂閱

訂閱topic:/login

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

發布topic:/login

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

查看訂閱topic處,即可看到發送的內容。

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    12

    文章

    9025

    瀏覽量

    85189
收藏 人收藏

    評論

    相關推薦

    搭建海外云服務器需要什么費用?

    搭建海外云服務器的費用涉及多個方面,包括服務器實例費用、公網帶寬費用、磁盤存儲費用、操作系統費用和其他費用。具體費用取決于所選的云服務提供商、服務器
    的頭像 發表于 10-29 10:55 ?126次閱讀

    Kubernetes集群搭建容器云需要幾臺服務器

    Kubernetes集群搭建容器云需要幾臺服務器?至少需要4臺服務器搭建容器云所需的服務器數量以及具體的
    的頭像 發表于 10-21 10:06 ?131次閱讀

    服務器搭建步驟

    服務器不僅提供了靈活的資源配置和強大的計算能力,還降低了IT基礎設施的維護成本。下面,rak小編帶您詳細了解云服務器搭建的步驟。
    的頭像 發表于 10-09 10:58 ?178次閱讀

    本地服務器和云服務器區別在哪里

    本地服務器依賴物理硬件,資源調配受限,成本高且擴展不便,但數據控制力強;而云服務器則基于虛擬化技術,資源彈性調配,成本低,易于擴展,且由云服務提供商負責維護安全和高可用性,適合快速變化
    的頭像 發表于 09-27 10:02 ?187次閱讀

    服務器搭建詳細過程

    隨著云計算技術的發展,越來越多的企業和個人開始選擇使用云服務器來部署自己的應用和服務。相比于傳統的物理服務器,云服務器提供了更高的靈活性、可擴展性和安全性。下面將詳細介紹如何
    的頭像 發表于 09-12 10:00 ?280次閱讀

    如何在服務器上調試本地FPGA板卡

    聯合開發或者跑多策略工程的時候,一般都使用多核的服務器進行FPGA設計。這個時候如果板卡在本地電腦上應該怎么進行調試呢? 今天就簡單講講《如何在服務器上調試本地FPGA板卡
    發表于 07-31 17:36

    使用SDK中的MQTT連接服務器,導致mqtt永遠斷開,請問是什么原因?

    使用SDK中的MQTT連接服務器,由于wifi信號不好會經常出現斷網重新連接的情況,重連次數多了以后MQTT_Connect函數中的espconn_gethostbyname返回Out of memory error,導致
    發表于 07-19 14:37

    NB81如何通過MQTT對接EMQX服務器

    NB81如何通過MQTT對接EMQX服務器,有對接流程的參考文檔么
    發表于 06-04 06:02

    分享 | PTP、NTP時間同步服務器的部署與搭建過程

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

     海外云服務器搭建pi節點詳細步驟

     海外云服務器搭建pi節點簡單嗎?海外云服務器搭建pi節點步驟有哪些?小編為您整理發布海外云服務器搭建
    的頭像 發表于 02-21 10:16 ?1069次閱讀

    什么是本地IP?服務器本地IP有哪些優勢?

    本地IP是指直接在互聯網上分配給服務器或設備的IP地址,而不是通過NAT(網絡地址轉換)或 代理等中間設備進行轉發。讓我們關注本地IP的優勢。 1.直接訪問:原始IP允許無中間設備轉發或代理直接
    的頭像 發表于 12-26 11:52 ?4882次閱讀

    【飛騰派4G版免費試用】如何在飛騰開發板上安裝EMQX MQTT服務器

    系統中搭建一個單節點的MQTT服務器。 1. 安裝EMQX 本文演示的環境為: 硬件:飛騰派開發板,ARMV8架構 操作系統:Ubuntu 20.04 EMQX 安裝與運行 下載安裝包 訪問 EMQX
    發表于 12-26 11:16

    如何利用AWFlow搭建HTTP服務器

    本文將基于EsDA開發套件快速在開發板上搭建HTTP服務器,為HTTP客戶端提供了訪問板子的外設資源,數據以及文件讀寫等接口,實現設備與網絡服務的互聯互通。項目簡介在物聯網應用中,在開發板上
    的頭像 發表于 12-14 08:24 ?556次閱讀
    如何利用AWFlow<b class='flag-5'>搭建</b>HTTP<b class='flag-5'>服務器</b>

    如何自己搭建一個服務器

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

    搭建ftp服務器的步驟

    搭建ftp服務器的步驟? 搭建FTP服務器是一項需要一定技術知識的任務,但是只要按照以下步驟進行操作,您就能成功搭建自己的FTP
    的頭像 發表于 12-07 16:32 ?1122次閱讀