中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MQTT.js入門使用的方法是什么

發布時間:2023-04-15 10:26:25 來源:億速云 閱讀:109 作者:iii 欄目:開發技術

這篇文章主要介紹“MQTT.js入門使用的方法是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“MQTT.js入門使用的方法是什么”文章能幫助大家解決問題。

    簡介

    MQTT.js 是一個開源的 MQTT 協議的客戶端庫,使用 JavaScript 編寫,主要用于 Node.js 和 瀏覽器環境中。是目前 JavaScript 生態中使用最為廣泛的 MQTT 客戶端庫。

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

    由于 JavaScript 單線程特性,MQTT.js 是全異步 MQTT 客戶端,MQTT.js 支持 MQTT/TCP、MQTT/TLS、MQTT/WebSocket,在不同運行環境支持的度如下:

    • 瀏覽器環境:MQTT over WebSocket(包括微信小程序、支付寶小程序等定制瀏覽器環境)

    • Node.js 環境:MQTT、MQTT over WebSocket

    注意:不同環境里除了少部分連接參數不同,其他 API 均是相同的。且在 MQTT.js v3.0.0 及以上版本后,已經完整支持到 MQTT 5.0。

    安裝

    使用 npm 或 yarn 安裝

    npm install mqtt --save
    
    # 或使用 yarn
    
    yarn add mqtt

    注意:如果您的 Node 環境是 v12 或 v14 及以上版本,請使用 MQTT.js 4.0.0 及以上版本

    使用 CDN 安裝

    瀏覽器環境中,我們還可以使用 CDN 的方式引入 MQTT.js。MQTT.js 的 bundle 包通過 http://unpkg.com 管理,我們可以直接添加 unpkg.com/mqtt/dist/mqtt.min.js 來進行使用。

    <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
    <script>
      // 將在全局初始化一個 mqtt 變量
      console.log(mqtt)
    </script>

    全局安裝

    除了上述的安裝方式外,MQTT.js 還提供了全局安裝的方式,使用命令行工具來完成 MQTT 的連接、發布和訂閱等。

    npm install mqtt -g

    我們會在下文中的一些使用教程中詳細描述如何使用 MQTT.js 的命令行工具。

    使用

    本文將使用 EMQX Cloud 提供的 免費公共 MQTT 服務器 作為本次測試的 MQTT 服務器地址,服務器接入信息如下:

    • Broker: broker.emqx.io

    • TCP Port: 1883

    • SSL/TLS Port: 8883

    更多詳情請訪問 EMQX Cloud 官網,或查看 EMQX Cloud 文檔。

    簡單例子

    我們簡單編寫一段代碼實現連接到 EMQX Cloud 并完成訂閱主題、收發消息的簡單例子。因為在瀏覽器環境中僅支持使用 WebSocket 連接,所以我們將使用在瀏覽器環境和 Node.js 環境兩種不同的連接參數來完成連接。不過除連接地址外,其它參數均是相同的,因此讀者可根據自己的實際情況選擇使用。

    const mqtt = require('mqtt')
    
    /***
     * 瀏覽器環境
     * 使用協議為 ws 和 wss 的 MQTT over WebSocket 連接
     * EMQX 的 ws 連接默認端口為 8083,wss 為 8084
     * 注意需要在連接地址后加上一個 path, 例如 /mqtt
     */
    const url = 'ws://broker.emqx.io:8083/mqtt'
    /***
     * Node.js 環境
     * 使用協議為 mqtt 和 mqtts 的 MQTT over TCP 連接
     * EMQX 的 mqtt 連接默認端口為 1883,mqtts 為 8084
     */
    // const url = 'mqtt://broker.emqx.io:1883'
    
    // 創建客戶端實例
    const options = {
      // Clean session
      clean: true,
      connectTimeout: 4000,
      // 認證信息
      clientId: 'emqx_test',
      username: 'emqx_test',
      password: 'emqx_test',
    }
    const client = mqtt.connect(url, options)
    client.on('connect', function () {
      console.log('Connected')
      // 訂閱主題
      client.subscribe('test', function (err) {
        if (!err) {
          // 發布消息
          client.publish('test', 'Hello mqtt')
        }
      })
    })
    
    // 接收消息
    client.on('message', function (topic, message) {
      // message is Buffer
      console.log(message.toString())
      client.end()
    })

    命令行

    在全局安裝完 MQTT.js 后,我們同樣可以使用命令行工具來完成主題訂閱消息發布接收的動作。

    示例連接到 broker.emqx.io 并訂閱 testtopic/# 主題:

    mqtt sub -t 'testtopic/#' -h 'broker.emqx.io' -v

    示例連接到 broker.emqx.io 并向 testtopic/hello 主題發送消息

    mqtt pub -t 'testtopic/hello' -h 'broker.emqx.io' -m 'from MQTT.js'

    如需使用功能更加全面的 MQTT 命令行工具,可參考使用 MQTT X CLI。

    API 介紹

    mqtt.connect([url], options)

    連接到指定的 MQTT Broker 的函數,并始終返回一個 Client 對象。第一個參數傳入一個 URL 值,URL 可以是以下協議:mqttmqttstcptlswswss。URL 也可以是一個由 URL.parse() 返回的對象。然后再傳入一個 Options 對象,用于配置 MQTT 連接時的選項。當使用 WebSocket 連接時需要注意地址后是否需要加上一個 path,例如 /mqtt

    下面列舉一些常用的 Options 對象中的屬性值:

    • Options

      • topic: 遺囑發送的 Topic

      • payload: 遺囑發布的消息

      • QoS: 遺囑發送的 QoS 值

      • retain: 遺囑發布的消息的 retain 標志

      • keepalive: 單位為,數值類型,默認為 60 秒,設置為 0 時禁止

      • clientId: 默認為 'mqttjs_' + Math.random().toString(16).substr(2, 8),可以支持自定義修改的字符串

      • protocolVersion: MQTT 協議版本號,默認為 4(v3.1.1)可以修改為 3(v3.1)和 5(v5.0)

      • clean: 默認為 true,是否清除會話。當設置為 true 時,斷開連接后將清除會話,訂閱過的 Topics 也將失效。當設置為 false 時,離線狀態下也能收到 QoS 為 1 和 2 的消息

      • reconnectPeriod: 重連間隔時間,單位為毫秒,默認為 1000 毫秒,注意:當設置為 0 以后將取消自動重連

      • connectTimeout: 連接超時時長,收到 CONNACK 前的等待時間,單位為毫秒,默認 30000 毫秒

      • username: 認證用戶名,如果 Broker 要求用戶名認證的話,請設置該值

      • password: 認證密碼,如果 Broker 要求密碼認證的話,請設置該值

      • will: 遺囑消息,一個可配置的對象值,當客戶端非正常斷開連接時,Broker 就會向遺囑 Topic 里面發布一條消息,格式為:

      • properties: MQTT 5.0 新增,可配置的對象的屬性值,詳情請參考:https://github.com/mqttjs/MQTT.js#mqttclientstreambuilder-options

    • 如果需要配置 SSL/TLS 連接,Option 對象會被傳遞給 tls.connect() ,因此可以在 option 中配置以下屬性

      • rejectUnauthorized: 是否驗證服務端證書鏈和地址名稱,設置為 false 時將跳過驗證,會暴露在中間人的攻擊之下,所以不建議在生產環境中使用這種配置,當設置為 true 時,將開啟強認證模式,且如果是自簽名證書,請在證書配置時設置 Alt name。

      • ca: 只有在服務器使用自簽名證書時才有必要,自簽名證書中生成的 CA 文件

      • cert: 只有當服務器需要客戶證書認證時才有必要(雙向認證),客戶端證書

      • key: 只有當服務器需要客戶證書認證時才有必要(雙向認證),客戶端密鑰

    Client 事件

    當連接成功后,返回的 Client 對象可通過 on 方法監聽多個事件,業務邏輯可在監聽的回調函數中完成。以下列舉一些常用的事件:

    connect

    當連接成功時觸發,參數為 connack

    client.on('connect', function (connack) {
      console.log('Connected')
    })

    reconnect

    當斷開連接后,經過重連間隔時間重新自動連接到 Broker 時觸發

    client.on('reconnect', function () {
      console.log('Reconnecting...')
    })

    close

    在斷開連接以后觸發

    client.on('close', function () {
      console.log('Disconnected')
    })

    disconnect

    在收到 Broker 發送過來的斷開連接的報文時觸發,參數 packet 即為斷開連接時接收到的報文,MQTT 5.0 中的功能

    client.on('disconnect', function (packet) {
      console.log(packet)
    })

    offline

    當客戶端下線時觸發

    client.on('offline', function () {
      console.log('offline')
    })

    error

    當客戶端無法成功連接時或發生解析錯誤時觸發,參數 error 為錯誤信息

    client.on('error', function (error) {
      console.log(error)
    })

    message

    當客戶端收到一個發布過來的 Payload 時觸發,其中包含三個參數,topic、payload 和 packet,其中 topic 為接收到的消息的 topic,payload 為接收到的消息內容,packet 為 MQTT 報文信息,其中包含 QoS、retain 等信息

    client.on('message', function (topic, payload, packet) {
      // Payload is Buffer
      console.log(`Topic: ${topic}, Message: ${payload.toString()}, QoS: ${packet.qos}`)
    })

    Client 方法

    Client 除監聽事件外,也內置一些方法,用來進行發布訂閱的操作等,以下列舉一些常用的方法。

    Client.publish(topic, message, [options], [callback])

    向某一 topic 發布消息的函數方法,其中包含四個參數:

    // 向 testtopic 主題發送一條 QoS 為 0 的測試消息
    client.publish('testtopic', 'Hello, MQTT!', { qos: 0, retain: false }, function (error) {
      if (error) {
        console.log(error)
      } else {
        console.log('Published')
      }
    })
    • topic: 要發送的主題,為字符串

    • message: 要發送的主題的下的消息,可以是字符串或者是 Buffer

    • options: 可選值,發布消息時的配置信息,主要是設置發布消息時的 QoS、Retain 值等。

    • callback: 發布消息后的回調函數,參數為 error,當發布失敗時,該參數才存在

    Client.subscribe(topic/topic array/topic object, [options], [callback])

    訂閱一個或者多個 topic 的方法,當連接成功需要訂閱主題來獲取消息,該方法包含三個參數:

    // 訂閱一個名為 testtopic QoS 為 0 的 Topic
    client.subscribe('testtopic', { qos: 0 }, function (error, granted) {
      if (error) {
        console.log(error)
      } else {
        console.log(`${granted[0].topic} was subscribed`)
      }
    })
    • topic: 可傳入一個字符串,或者一個字符串數組,也可以是一個 topic 對象,{'test1': {qos: 0}, 'test2': {qos: 1}}

    • options: 可選值,訂閱 Topic 時的配置信息,主要是填寫訂閱的 Topic 的 QoS 等級的

    • callback: 訂閱 Topic 后的回調函數,參數為 error 和 granted,當訂閱失敗時 error 參數才存在, granted 是一個 {topic, qos} 的數組,其中 topic 是一個被訂閱的主題,qos 是 Topic 是被授予的 QoS 等級

    Client.unsubscribe(topic/topic array, [options], [callback])

    取消訂閱單個主題或多個主題,該方法包含三個參數:

    // 取消訂閱名為 testtopic 的 Topic
    client.unsubscribe('testtopic', function (error) {
      if (error) {
        console.log(error)
      } else {
        console.log('Unsubscribed')
      }
    })
    • topic: 可傳入一個字符串或一個字符串數組

    • options: 可選值,取消訂閱時的配置信息

    • callback: 取消訂閱時的回調函數,參數為 error,當取消訂閱失敗時 error 參數才存在

    Client.end([force], [options], [callback])

    關閉客戶端,該方法包含三個參數:

    client.end()
    • force: 設置為 true 時將立即關閉客戶端,而無需等待斷開連接的消息被接受。這個參數是可選的,默認為 false。注意:使用該值為 true 時,Broker 無法接收到 disconnect 的報文

    • options: 可選值,關閉客戶端時的配置信息,主要是可以配置 reasonCode,斷開連接時的 Reason Code

    • callback: 當客戶端關閉時的回調函數

    關于“MQTT.js入門使用的方法是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    万年县| 梁河县| 南乐县| 浏阳市| 太仆寺旗| 辽源市| 枣强县| 吉水县| 车险| 玉溪市| 玉山县| 时尚| 马关县| 樟树市| 屏边| 濮阳县| 南木林县| 德安县| 南雄市| 阜新| 江油市| 宜川县| 肃北| 博白县| 山阴县| 冕宁县| 昌宁县| 巴青县| 濮阳市| 兖州市| 彭山县| 威海市| 绥中县| 纳雍县| 株洲县| 沙河市| 黔江区| 衡东县| 财经| 五华县| 临汾市|