mini-mqtt-bus
Version:
MQTT client wrapper with event bus for WeChat Mini Programs
131 lines (90 loc) • 3.11 kB
Markdown
# 📦 mini-mqtt-bus
> ✅ 一款专为微信小程序设计的 MQTT + 事件总线组合模块,基于 `mqtt.js` 封装,支持自动重连、主题订阅分发等功能。
## 🚀 安装
```bash
# 使用 npm
npm install mini-mqtt-bus
# 使用 pnpm / yarn 也可
pnpm add mini-mqtt-bus
```
## 📦 目录结构建议(建议这样组织)
```bash
your-miniapp/
├── utils/
│ ├── mqttClient.ts # 引入并使用 mini-mqtt-bus
│ └── eventBus.ts # 可选:你也可以使用自己的事件总线
```
## 🧱 模块功能
- ✅ MQTT 连接/断开/重连监听
- ✅ 支持动态传入连接参数(灵活复用)
- ✅ 支持按主题分发消息事件
- ✅ 自动跳过模拟器连接
- ✅ 提供 `subscribe / publish / unsubscribe / disconnect` 等接口
- ✅ 内部使用 `wx.connectSocket` 实现小程序环境 MQTT 支持
## ✨ 快速使用示例(微信小程序)
### `app.ts` 中初始化
```ts
import { mqttClient } from "mini-mqtt-bus";
import eventBus from "mini-mqtt-bus/eventBus"; // 内置事件总线,也可以用自己的
mqttClient.init({
protocol: "wxs",
host: "your-mqtt-host.com",
port: 8084,
path: "/mqtt",
clientId: "wechat_" + Math.random().toString(16).substr(2, 8),
username: "your-username",
password: "your-password",
keepalive: 60,
clean: true,
reconnectPeriod: 2000,
});
// 连接成功后订阅主题
eventBus.on("mqtt:connected", () => {
mqttClient.subscribe("1a");
});
// 订阅成功后发送消息
eventBus.on("mqtt:subscribed:1a", () => {
mqttClient.publish("1a", "小程序发送的一条测试消息");
});
// 接收消息
eventBus.on("mqtt:message:1a", (payload) => {
console.log("收到消息:", payload);
});
```
## 📡 事件列表
| 事件名 | 说明 |
|--------|------|
| `mqtt:connected` | 成功建立 MQTT 连接 |
| `mqtt:message:<topic>` | 收到某个主题的消息 |
| `mqtt:message` | 收到任意消息,包含 `{ topic, payload }` |
| `mqtt:subscribed:<topic>` | 成功订阅某个主题 |
| `mqtt:unsubscribed:<topic>` | 成功取消订阅某个主题 |
| `mqtt:reconnecting` | 正在尝试重连 |
| `mqtt:closed` | 连接关闭 |
| `mqtt:error` | 连接或操作异常 |
| `mqtt:disconnected` | 主动断开连接 |
## 🧩 API 文档
### `mqttClient.init(options: MqttOptions)`
初始化连接,接收 mqtt.js 支持的连接参数对象(详见 [mqtt.js connect options](https://github.com/mqttjs/MQTT.js#connect))。
### `mqttClient.subscribe(topic: string)`
订阅主题,支持监听 `mqtt:subscribed:<topic>` 事件。
### `mqttClient.publish(topic: string, payload: string)`
发布消息到指定主题。
### `mqttClient.unsubscribe(topic: string)`
取消订阅指定主题。
### `mqttClient.disconnect()`
主动断开连接。
## 🛡️ 注意事项
- 模块依赖 `mqtt.min.js`(请确保使用兼容微信小程序的版本)
- 若自定义事件总线,可自行替换 `eventBus.ts`
- 需在小程序配置中声明相关域名和安全连接权限
## 📃 License
MIT © Kaze