连接
connectToMQTT() {
const brokerUrl = "ws://XXX.XXX.XXX.XX:XXXXX/mqtt"; // 根据实际情况调整URL
const clientId= `mqtt_${Math.random().toString(16).substring(2, 8)}`;
this.mqttClient = mqtt.connect(brokerUrl, {
username: "",
password: "",
clientId:""
});
console.log(this.mqttClient.on);
// 连接成功回调
this.mqttClient.on("connect", () => {
console.log("Connected to MQTT broker");
});
// 错误处理
this.mqttClient.on("error", (err) => {
console.error("MQTT connection error:", err);
});
},
订阅
doSubscribe() {
const topic = `/XXXXXX/XXXXX`;
this.mqttClient.subscribe(topic, (err, res) => {
if (!err) {
console.log(`Subscribed to topic: ${topic}`, res);
} else {
console.error("Failed to subscribe:", err);
}
this.mqttClient.on("message", (topic, message) => {
//收到消息回调
console.log(topic, message, "topic, message");
});
});
},
取消订阅
doUnSubscribe() {
const topic = `/XXXXXX/XXXXXXXX;
this.mqttClient.unsubscribe(topic, (error) => {
if (error) {
console.log("Unsubscribe error", error);
}else{
console.log("Unsubscribe success");
}
});
},
断开连接
destroyed() {
if (this.mqttClient.connected) {
try {
this.mqttClient.end(false, () => {
console.log('Successfully disconnected!')
})
} catch (error) {
console.log('Disconnect failed', error.toString())
}
}
}
QoS
MQTT(Message Queuing Telemetry Transport)协议中的QoS(Quality of Service,服务质量)是指控制消息传递可靠性的机制。它定义了消息从发布者到订阅者之间传输时的保障级别。MQTT协议提供了三种不同的QoS级别,每种级别都权衡了消息的可靠性和网络带宽的使用效率:
1. **QoS 0(At Most Once)**:
- 这是最基本的传输模式,消息可能会丢失,也可能被重复发送,但至少尝试发送一次。
- 发布者不会等待确认消息,因此这种模式下消息传输最快,但最不可靠。
- 适用于对消息丢失不敏感的应用场景,如传感器数据,其中偶尔丢失的数据不会严重影响整体结果。
2. **QoS 1(At Least Once)**:
- 保证消息至少被传递一次,可能会有重复。
- 发布者需要从broker接收到一个确认(PUBACK)消息,如果没收到确认则会重发。
- 这个级别增加了消息传输的可靠性,但同时也增加了网络开销和延迟。
- 适用于需要确保消息被接收但可以容忍少量重复的场景。
3. **QoS 2(Exactly Once)**:
- 提供了最高级别的消息传输保证,消息只被传递一次,不会有丢失或重复。
- 实现这个级别的机制比较复杂,包括了四步交互过程(PUBLISH, PUBREC, PUBREL, PUBCOMP)来确保消息的准确无误。
- 这是MQTT中最可靠但也最消耗资源的传输模式。
- 适合对数据完整性和顺序高度敏感的应用,例如财务交易或关键指令的传输。
选择哪个QoS级别取决于具体应用场景的需求,既要考虑数据的重要性,也要考虑网络条件和系统资源的限制。