當(dāng)前位置:首頁 > IT技術(shù) > 微信平臺 > 正文

使用微信小程序連接到 MQTT 云服務(wù)
2021-09-03 20:12:52

微信小程序是騰訊于 2017 年 1 月 9 日推出的一種不需要下載安裝即可在微信平臺上使用的應(yīng)用程序,用戶掃一掃或者搜一下即可打開應(yīng)用。也體現(xiàn)了“用完即走”的理念,用戶不用關(guān)心是否安裝太多應(yīng)用的問題。應(yīng)用將無處不在,隨時可用,但又無需安裝卸載。對于開發(fā)者而言,小程序開發(fā)門檻相對較低,難度不及 APP,能夠滿足簡單的基礎(chǔ)應(yīng)用,對于用戶來說,能夠節(jié)約使用時間成本和手機(jī)內(nèi)存空間,對于開發(fā)者來說也能節(jié)約開發(fā)和推廣成本。

本文主要介紹如何在微信小程序項(xiàng)目中使用 MQTT,實(shí)現(xiàn)小程序客戶端與 MQTT 云服務(wù)的連接、訂閱、收發(fā)消息、取消訂閱等功能。

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

項(xiàng)目初始化

前期準(zhǔn)備

注冊微信小程序帳號,并下載微信開發(fā)者工具。由于微信小程序安全要求比較高,在與后臺服務(wù)器之間的通訊必須使用 https 或 wss 協(xié)議,因此要在微信小程序后臺設(shè)置域名服務(wù)器。

微信小程序僅支持通過 WebSocket 進(jìn)行即時通信,EMQ X 的 MQTT Over WebSocket 能夠完全兼容使用在微信小程序上。但由于微信小程序的規(guī)范限制,EMQ X 使用微信小程序接入時需要注意以下幾點(diǎn):

  • 使用已經(jīng)通過域名備案域名接入

  • 域名需要微信公眾平臺登錄后在主頁面的服務(wù)器域名下添加配置服務(wù)器域名地址
  • 僅支持 WebSocket/TLS 協(xié)議,需要為域名分配受信任 CA 頒發(fā)的證書
  • 由于微信小程序 BUG,安卓真機(jī)必須使用 TLS/443 端口,否則會連接失?。催B接地址不能帶端口)

添加服務(wù)器域名,這里我們將 broker.emqx.io 為例添加到服務(wù)器域名中,我們進(jìn)入到頁面中選擇開始配置按鈕,在 socket 合法域名列下輸入 wss://broker.emqx.io注意:必須以 wss 協(xié)議開頭,如下圖:

微信小程序添加 MQTT 服務(wù)器域名

添加完成后,在微信小程序開發(fā)時才允許我們于該域名地址下的服務(wù)器進(jìn)行通信與交互。

新建項(xiàng)目

準(zhǔn)備完成前期網(wǎng)絡(luò)通訊相關(guān)工作后,我們打開已經(jīng)下載好了的微信開發(fā)者工具,打開后在頁面點(diǎn)擊新建一個小程序項(xiàng)目,如下圖所示:

新建小程序項(xiàng)目

點(diǎn)擊確認(rèn)后,微信開發(fā)者工具就自動初始化好了項(xiàng)目,我們就可以開始開發(fā)了。

安裝 MQTT 客戶端庫

因?yàn)樾〕绦蚴峭ㄟ^ JavaScript 開發(fā)的,因此可以使用 MQTT.js 作為 MQTT 客戶端庫。

從小程序基礎(chǔ)庫版本 2.2.1 或以上、及開發(fā)者工具 1.02.1808300 或以上開始,小程序支持使用 npm 安裝第三方包。如感興趣的讀者可自行查看小程序 npm 支持的官方文檔來操作使用,本文為簡化操作過程,將不使用 npm 的方式安裝。我們將在 utils 文件夾下新建一個 mqtt.js 文件,我們直接獲取在 MQTT.js CDN 上的打包構(gòu)建后的源碼復(fù)制 mqtt.js 文件中。

MQTT.js CDN 地址:https://unpkg.com/mqtt@4.0.1/dist/mqtt.min.js 可通過瀏覽器打開查看。

注意:截止目前最新的 mqtt.js v4.2.8 版本,在小程序中使用會報 net.createConnection 未定義的錯誤,需要回退和使用 4.0.1 版本。

完成后我們,在 index.js 主頁面中直接 import 即可:

import mqtt from '../../utils/mqtt'

MQTT 使用

本文將使用 EMQ X Cloud 提供的 免費(fèi)公共 MQTT 服務(wù)器 作為本次測試的 MQTT 服務(wù)器地址,服務(wù)器接入信息如下:

  • Broker: broker.emqx.io
  • TCP Port: 1883
  • SSL/TLS Port: 8883

更多詳情請訪問 EMQ X Cloud 官網(wǎng),或查看 EMQ X Cloud 文檔。

連接代碼

微信小程序使用 WebSocket 的方式連接到 MQTT 服務(wù)器,但連接的 URL 地址中請使用 wxs 協(xié)議名稱,連接及初始化數(shù)據(jù)的關(guān)鍵代碼:

Page({
  data: {
    client: null,
    host: 'broker.emqx.io:8084',
    topic: 'testtopic/miniprogram',
    msg: 'Hello! I am from WeChat miniprogram',
    mqttOptions: {
      protocolVersion: 4, //MQTT連接協(xié)議版本
      clientId: 'emqx_cloud_miniprogram',
      clean: true,
      password: '',
      username: '',
      reconnectPeriod: 1000, // 1000毫秒,兩次重新連接之間的間隔
      connectTimeout: 30 * 1000, // 1000毫秒,兩次重新連接之間的間隔
      resubscribe: true // 如果連接斷開并重新連接,則會再次自動訂閱已訂閱的主題(默認(rèn)true)
    },
  },
  connect() {
    this.data.client = mqtt.connect(`wxs://${this.data.host}/mqtt`, this.data.mqttOptions)
    this.data.client.on('connect', () => {
      wx.showToast({
        title: '連接成功'
      })
    })
  },
})

訂閱主題

subscribe() {
  this.data.client.subscribe(this.data.topic)
  wx.showToast({
    title: '主題訂閱成功'
  })
},

取消訂閱

unsubscribe() {
  this.data.client.unsubscribe(this.data.topic)
  wx.showToast({
    title: '取消訂閱成功'
  })
},

消息發(fā)布

publish() {
  this.data.client.publish(this.data.topic, this.data.msg)
},

斷開連接

disconnect() {
  this.data.client.end()
  wx.showToast({
    title: '斷開連接成功'
  })
},

測試

我們在小程序中簡單編寫了如下應(yīng)用界面,該應(yīng)用具備:創(chuàng)建連接、訂閱主題、收發(fā)消息、取消訂閱、斷開連接等功能。

完整的項(xiàng)目示例代碼:https://github.com/emqx/MQTT-Client-Examples/tree/master/mqtt-client-wechat-miniprogram

小程序示例應(yīng)用

使用 MQTT 5.0 客戶端工具 - MQTT X 作為另一個客戶端進(jìn)行消息收發(fā)測試。

MQTT 5.0 客戶端工具 - MQTT X

可以看到 MQTT X 可以正常接收來到來自小程序發(fā)送過來的消息,同樣,使用 MQTT X 向該主題發(fā)送一條消息時,也可以看到小程序能正常接收到該消息。

微信小程序接收 MQTT 消息

總結(jié)

綜上所述,我們實(shí)現(xiàn)了在小程序項(xiàng)目中創(chuàng)建 MQTT 連接,模擬了小程序客戶端與 MQTT 服務(wù)器進(jìn)行訂閱、收發(fā)消息、取消訂閱以及斷開連接的場景。

版權(quán)聲明: 本文為 EMQ 原創(chuàng),轉(zhuǎn)載請注明出處。

原文鏈接:https://www.emqx.com/zh/blog/how-to-use-mqtt-in-wechat-miniprogram

技術(shù)支持:如對本文或 EMQ 相關(guān)產(chǎn)品有疑問,可訪問 EMQ 問答社區(qū) https://askemq.com 提問,我們將會及時回復(fù)支持。

更多技術(shù)干貨,歡迎關(guān)注我們公眾號【EMQ 中文社區(qū)】。

本文摘自 :https://blog.51cto.com/u

開通會員,享受整站包年服務(wù)立即開通 >