什么是mqtt
- MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上。
- MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。其在,通过卫星链路通信传感器、偶尔拨号的医疗设备、智能家居、及一些小型化设备中已广泛使用。
- 实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。
MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
- Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);
- payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
vue使用mqtt
- 下载包
npm i mqtt
- 抽离mqtt组件 子组件
components/mqtt/index.vue
<template></template>
<script>
import {get_mqtt_info} from "@/api/guest-control-manage/room"
import {mapGetters} from "vuex"
import mqtt from 'mqtt'
export default {
name: "MqttClient",
data() {
return {
client:null
};
},
methods: {
mqtt_connect(e) {
let data = {hotelId: this.hotel_id}
get_mqtt_info(data).then(({code,data})=>{
if(code === '0'){
let options = {
connectTimeout: 40000,
clientId: data.clientId,
username: data.userName,
password: data.password,.
clean: true
}
this.client = mqtt.connect(data.wsMqttUrl,options)
this.client.on('connect', (e) => {
console.log("mqtt连接成功")
this.client.subscribe(data.topics[0], { qos: 0 }, (error) => {
if (!error) {
console.log('mqtt订阅成功')
} else {
console.log('mqtt订阅失败')
}
})
})
this.client.on('message', (topic, message) => {
this.$emit("mqtt_message", JSON.parse(message));
})
}
})
},
disconnect_mqtt() {
try {
console.log("断开mqtt连接");
if (this.client) {
this.client.disconnect();
this.client = null;
}
} catch (e) {
console.log(e);
}
}
},
computed:{
...mapGetters(['hotel_id'])
}
};
</script>
- 父组件使用mqtt
</template>
</div>
<!--3.使用组件 mqtt通信组件 -->
<MqttClient @mqtt_message="mqtt_message" ref="mqtt"/>
</div>
</template>
<script>
import MqttClient from "@/components/Mqtt/index";
export default {
components: {MqttClient},
data(){
return {
}
}
created(){
this.$nextTick(() => {
this.$refs.mqtt.mqtt_connect();
});
},
beforeDestroy () {
this.$refs.mqtt.disconnect_mqtt();
},
methods:{
mqtt_message(res){
console.log(res);
}
},
}
</script>
mqtt调试工具