• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

微信小程序连接EMQX服务器

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

最近在做微信小程序连接物联网的项目,奈何网上资料总是与需求不尽匹配,在不断实验中终于算是成功了,在此稍作记录。

效果展示

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服务器的内容了,希望对读者有些许帮助。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap