微信小程序連接EMQX服務器


最近在做微信小程序連接物聯網的項目,奈何網上資料總是與需求不盡匹配,在不斷實驗中終於算是成功了,在此稍作記錄。

效果展示

EMQX服務端配置

主機地址替換為服務器域名,要是沒有ICP備案的話就使用WS通信,即使用8083端口,點擊上圖連接即可。

如果經過了備案,並且獲得了SSL證書,可以勾選SSL,此時通過WSS通信,使用8084端口。

注意:服務器一定要放行相關端口!查看防火牆或安全規則確認端口打開情況。

如果想使用WSS通信,需要如下的額外配置。

EMQX部署證書步驟如下:

在證書頒發網站下載xxx.pem和xxx.key文件,重命名為cert.pem和key.pem,(.key后綴變更為.pem無妨,其內容不會改變),替換EMQX安裝路徑下etc/certs/cert.pem和key.pem。也可以選擇更改etc/emqx.conf中listener.wss.externel.keyfile和listener.wss.externel.certfile,均需以pem為后綴。

微信小程序域名設置步驟如下:

進入微信公眾平台,選擇開發管理,開發設置,修改socket合法域名,保留wss://,后面不要加端口。

之后清除微信小程序緩存,在詳情,項目配置中可看到更改已生效。

微信小程序部分代碼

下面為mqtt通信相關js代碼

import mqtt from '../../utils/mqtt.min.js'; 
Page({

    /**
     * 頁面的初始數據
     */
    data: {
        client: 'wxapp',
        host: 'x.x.x.x:8083',
        /*
        注意這里使用8083端口,按照需求決定是否更改8084。x.x.x.x可以直接替換為域名,填寫域名綁定的公網IP也可。
        */
        topic: 'testtopic/miniprogram',
        msg: '',
        mqttOptions: {
          protocolVersion: 4, 
          clientId: 'wxapp',
          clean: true,
          password: 'wxapp',//自定義,與EMQX服務器配置相同均可
          username: 'wxapp',//自定義,與EMQX服務器配置相同均可
          reconnectPeriod: 1000, 
          connectTimeout: 30 * 1000, 
          resubscribe: true // 如果連接斷開並重新連接,則會再次自動訂閱已訂閱的主題(默認true)
        },
    },
    setHost(e) {
        this.setData({
            host: e,
        })
    },
    setTopic(e) {
        this.setData({
            topic: e,
        })
    },
    setMsg(e) {
        this.setData({
            msg: e,
        })
    },
    connect() {
        this.data.client = mqtt.connect(`wx://${this.data.host}/mqtt`, this.data.mqttOptions)
        /*
        注意上面是wx://,使用8083端口,如果使用8084端口,需要改為wxs://
        */
        this.data.client.on('connect', () => {
            console.log('連接成功')
            this.data.client.on('message', (topic, payload) => {
                console.log(`收到 Topic: ${topic}, Payload: ${payload}`)
            })
            this.data.client.on('error', (error) => {
                console.log('error')
            })
            this.data.client.on('reconnect', () => {
                console.log('Reconnecting...')
            })
            this.data.client.on('offline', (errr) => {
                console.log('Offline')
            })
        })
    },
    disconnect() {
        this.data.client.end()
        this.setData({
          btnText: '連接',
        })
        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: `取消訂閱成功`
        })
    },
    publish() {
        this.data.client.publish(this.data.topic, this.data.msg)
        console.log('已發送消息')
    },    
    onLoad: function (options) {
        this.connect();
        this.subscribe();
    },

微信小程序連接EMQX服務器

連接前先為微信小程序創建client端

這里我已經新建好了,點擊新建用戶,輸入小程序對應的username和password即可創建。

回到websocket頁面,應該可以看到小程序已經連接了EMQX服務器。

接下來實現EMQX向微信小程序發消息。首先點擊訂閱,(主題要和小程序端匹配)小程序使用上面的程序應該完成了連接和訂閱testtopic/miniprogram這個主題,點擊訂閱后實際訂閱了所有testtopic下的主題。在消息面板中更改主題為testtopic/miniprogram,編輯消息,消息的格式要為json,最后點擊發送,應該可以在微信小程序控制台收到發送的消息。至於微信小程序如何向EMQX服務端發送消息,在合適的位置使用this.public即可。注意發布時接收方要訂閱相應主題

以上就是微信小程序連接EMQX服務器的內容了,希望對讀者有些許幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM