参考资料:
什么是 MQTT?- MQTT 协议简介 - AWS (amazon.com)
MQTT协议,终于有人讲清楚了 - 知乎 (zhihu.com)
项目使用
1 创建一个uniapp 默认项目,安装mqtt
npm install mqtt@3.0.0
<view>连接mqtt</view>
<script>
export default{
methods:{
connect() {
var self = this
var subscribe = "test"
var mqtt = require('mqtt/dist/mqtt.js')
// #ifdef H5
let options = {
clientId:"H5_001",
connectTimeout: 5000,
clean: true,
username: "",
password: ""
}
// 此处的端口为mqtt.js中的http端口,否则H5和手机连接不上mqtt服务器
var client = mqtt.connect('wss://127.0.0.1:8085/mqtt',options)
// #endif
// #ifdef MP-WEIXIN||APP-PLUS
let options = {
clientId:"APP_001",
connectTimeout: 5000,
clean: true
}
// 此处需要改成你的主机ip,并保证测试手机跟你的电脑处于同一个局域网
var client = mqtt.connect('wxs://127.0.0.1:8085/mqtt',options)
// #endif
client.on('connect', function(res) {
uni.showToast({
title:"连接成功",
duration:2000,
icon:"none"
})
client.subscribe(subscribe, function(err) {
if (!err) {
uni.showToast({
title:"订阅成功",
duration:2000,
icon:"none"
})
}
})
}).on('message', function(topic, message) {
console.log(JSON.parse(message.toString()))
}).on('reconnect', function(topic, message) {
console.log("重连")
})
}
}
}
</script>
2 本地搭建node mqtt服务
- 安装
npm install mqtt --save
npm install mosca --save
- 创建文件mqtt.js
var mosca = require('mosca'); //构建服务器
// 此处配置mqtt的http客户端,尤为重要,http.port则为你HTTP访问端口,可以在网页上输入127.0.0.1:8085(端口),能请求成功则配置成功
var MqttServer = new mosca.Server({
port: 8083,
http: {
port: 8085,
bundle: true,
static: './'
}
});
//监听链接
MqttServer.on("clientConnected", function(client) {
console.log("client connected", client.id);
});
//监听mqtt的主题消息
MqttServer.on("published", function(packet, client) { //当客户端有连接的时候,发布主题消息
var topic = packet.topic;
console.log(packet);
switch (topic) {
case 'test':
console.log("message-publish", packet.payload.toString());
//mqtt转发主题消息
MqttServer.publish({
topic: 'other',
payload: '这是服务端发过来的消息!'
});
break;
}
});
MqttServer.on('ready', function() {
console.log("mqtt is running....");
});
3 几个免费测试地址
| 协议 | 地址 | 端口 | 路径 | 证书 |
|---|---|---|---|---|
| mqtt | broker.hivemq.com | 8000 | 无 | 无 |
| mqtt | broker.emqx.io | 1883 | 无 | 无 |
| ws | test.mosquitto.org | 8080 | /mqtt | 无 |
| wss | test.mosquitto.org | 8081 | /mqtt | CA signed server |