当前位置:首页 > 新闻动态 > 网站文章

使用微信小程序连接到部署

来源: 浏览:110 时间:2023-08-09

使用微信小程序连接到部署

MQTT.js

前提条件 ​

TIP

EMQX Cloud 专业版部署建议绑定在云厂商自购的证书,选择单向认证且需在 EMQX Cloud 控制台部署详情页面配置 TLS/SSL 时上传证书链

运行中

安装依赖 ​

TIP

本地调试器连接成功,但真机调试有问题,建议尝试切换 MQTT.js 版本。请勿局限于本文推荐的相关版本,最新版本优先。

连接关键代码 ​

建立连接 ​

mqttOptions
Page({
  data: {
    client: null,
    conenctBtnText: "连接",
    host: "wx.emqxcloud.cn",
    subTopic: "testtopic/miniprogram",
    pubTopic: "testtopic/miniprogram",
    pubMsg: "Hello! I am from WeChat miniprogram",
    receivedMsg: "",
    mqttOptions: {
      username: "test",
      password: "test",
      reconnectPeriod: 1000, // 1000毫秒,设置为 0 禁用自动重连,两次重新连接之间的间隔时间
      connectTimeout: 30 * 1000, // 30秒,连接超时时间
      // 更多参数请参阅 MQTT.js 官网文档:https://github.com/mqttjs/MQTT.js#mqttclientstreambuilder-options
      // 更多 EMQ 相关 MQTT 使用教程可在 EMQ 官方博客中进行搜索:https://www.emqx.com/zh/blog
    },
  },
setValue(key, value) {
    this.setData({
      [key]: value,
    });
  },
connect() {
    // MQTT-WebSocket 统一使用 /path 作为连接路径,连接时需指明,但在 EMQX Cloud 部署上使用的路径为 /mqtt
    // 因此不要忘了带上这个 /mqtt !!!
    // 微信小程序中需要将 wss 协议写为 wxs,且由于微信小程序出于安全限制,不支持 ws 协议
    try {
      this.setValue("conenctBtnText", "连接中...");
      const clientId = new Date().getTime();
      this.data.client = mqtt.connect(`wxs://${this.data.host}:8084/mqtt`, {
        ...this.data.mqttOptions,
        clientId,
      });
this.data.client.on("connect", () => {
        wx.showToast({
          title: "连接成功",
        });
        this.setValue("conenctBtnText", "连接成功");
this.data.client.on("message", (topic, payload) => {
          wx.showModal({
            content: `收到消息 - Topic: ${topic},Payload: ${payload}`,
            showCancel: false,
          });
          const currMsg = this.data.receivedMsg ? `
${payload}` : payload; this.setValue("receivedMsg", this.data.receivedMsg.concat(currMsg)); }); this.data.client.on("error", (error) => { this.setValue("conenctBtnText", "连接"); console.log("onError", error); }); this.data.client.on("reconnect", () => { this.setValue("conenctBtnText", "连接"); console.log("reconnecting..."); }); this.data.client.on("offline", () => { this.setValue("conenctBtnText", "连接"); console.log("onOffline"); }); // 更多 MQTT.js 相关 API 请参阅 https://github.com/mqttjs/MQTT.js#api }); } catch (error) { this.setValue("conenctBtnText", "连接"); console.log("mqtt.connect error", error); } }, });

订阅主题 ​

subscribe() {
  if (this.data.client) {
    this.data.client.subscribe(this.data.subTopic)
    wx.showModal({
      content: `成功订阅主题:${this.data.subTopic}`,
      showCancel: false,
    })
    return
  }
  wx.showToast({
    title: '请先点击连接',
    icon: 'error',
  })
},

取消订阅 ​

unsubscribe() {
  if (this.data.client) {
    this.data.client.unsubscribe(this.data.subTopic)
    wx.showModal({
      content: `成功取消订阅主题:${this.data.subTopic}`,
      showCancel: false,
    })
    return
  }
  wx.showToast({
    title: '请先点击连接',
    icon: 'error',
  })
},

发布消息 ​

publish() {
  if (this.data.client) {
    this.data.client.publish(this.data.pubTopic, this.data.pubMsg)
    return
  }
  wx.showToast({
    title: '请先点击连接',
    icon: 'error',
  })
},

断开连接 ​

disconnect() {
  this.data.client.end()
  this.data.client = null
  this.setValue('conenctBtnText', '连接')
  wx.showToast({
    title: '成功断开连接'
  })
},

测试验证 ​

我们在小程序中简单编写了如下应用界面,该应用具备:创建连接、订阅主题、收发消息、取消订阅、断开连接等功能。

小程序进行连接并订阅主题 testtopic/miniprogram 之后,使用 MQTT 5.0 客户端工具 - MQTTX 作为另一个客户端订阅主题 testtopic/# 并发送一条消息到主题 testtopic/miniprogram

可以看到 MQTTX 可以正常接收来到来自小程序发送过来的消息,同样,使用 MQTTX 向该主题发送一条消息时,也可以看到小程序能正常接收到该消息。

常见问题 ​

v4.2.1v4.1.0v2.18.9v4.1.0v2.18.9v4.1.0v2.18.9

更多内容 ​

综上所述,我们实现了在微信小程序项目中创建 MQTT 连接,模拟了客户端与 MQTT 服务器进行订阅、收发消息、取消订阅以及断开连接的场景。可以在 这里 下载到示例的源码,同时也可以在 GitHub 上找到更多其他语言的 Demo 示例。

本示例只是进行了一个简单的 MQTT 连接演示,更多复杂功能还需开发者深入了解 MQTT 协议,然后进行探索研究实践。

地址 · ADDRESS

地址:建邺区新城科技园嘉陵江东街18号2层

邮箱:309474043@qq.Com

点击查看更多案例

联系 · CALL TEL

400-8793-956

售后专线:025-65016872

业务QQ:309474043    售后QQ:1850555641

©南京安优网络科技有限公司 版权所有   苏ICP备12071769号-4  网站地图