一、項目背景
公司和第三方合作開發一個傳感器項目,想要通過電腦或者手機去控制項目現場的傳感器控制情況。現在的最大問題在于,現場的邊緣終端設備接入的公網方式是無線接入,無法獲取固定IP,所以常規的HTTP協議通信就沒法做,現在打算使用MQTT來實現云平臺和邊緣終端(傳感器)之間的雙向通信。
二、術語定義
2.1云平臺
主要是針對數據、設備等的管理。部署在云端的軟件應用系統,通過與邊緣終端,實現數據獲取或者指令下發。
2.2邊緣終端
位于網絡邊緣的計算機設備,通過網絡與云平臺連接,向下連接解析儀和各類傳感器。
2.3解析儀
數據接受裝置,通過有線/無線模式,連接邊緣終端或通過有線模式接收不同來源的傳感器數據。
2.4傳感器
通過有線/無線模式,連接邊緣終端,傳輸相應的參數或通過有線模式連接解析儀,傳輸相應的參數。
三、網絡結構
四、代碼實現
4.1 服務器實現
首先安裝nodejs和aedes,具體的操作和截圖網上有很多現成的。
新建一個“server.js”
const aedes = require('aedes')(); const aedesServer = require('net').createServer(aedes.handle); const port = 1883; aedesServer.listen(port, function () { console.log('服務啟動并開始監聽端口:', port) }) //監聽MQTT服務器端口,當有客戶端連接上時,觸發該回調 aedes.on("client", (client) => { console.log("客戶端連接成功:", client.id); }) //監聽MQTT服務器端口,當有客戶端主動斷開連接或者服務器600s內沒收到某個客戶端的心跳包就會觸發 aedes.on("clientDisconnect", (client) => { console.log("客戶端斷開連接:", client.id); }) //監聽客戶端發布的主題 aedes.on("publish", function (packet, client) { //針對不同的客戶端寫不同的邏輯 if (client) { //根據主題不同寫不同的邏輯,建議采用JSON格式傳輸 console.log("監聽客戶端發過來的消息",packet.topic, packet.payload.toString()); } }) //服務器發出的消息 setInterval(() => { aedes.publish({ topic: "serverMsg", payload: "服務器發消息", qos: 1, retain: false, dup: false, cmd: "publish" }, (err) => { if (err) { console.log("發布失敗"); } }); }, 20000)
4.2客戶端實現
新建一個“client.js”
客戶端只需要使用“mqtt.connect”方法,就可以跟服務端建立長連接。
就目前實際使用的情況看,客戶端偶爾會自動與服務器斷開,并且自動連上,穩定性方面有待驗證。
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 }) }) //發布客戶端消息 setInterval(()=>{ client.publish('topic1','hello mqtt client',{ qos:1 }) },20000) client.on('message',function (topic,message){ console.log('接受服務器消息:','主題:',topic,'消息:',message.toString()) })
4.3 效果呈現
通過兩個定時器,實現了雙向通信。
服務端
客戶端
審核編輯:湯梓紅
-
傳感器
+關注
關注
2550文章
51035瀏覽量
753077 -
通信
+關注
關注
18文章
6024瀏覽量
135950 -
服務器
+關注
關注
12文章
9123瀏覽量
85324 -
云平臺
+關注
關注
1文章
1302瀏覽量
38943 -
MQTT
+關注
關注
5文章
650瀏覽量
22487
原文標題:四、代碼實現
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論