Javascript MQTT.js(mosqutio代理)-我多次收到相同的消息
我有两份申请。我多次收到相同的信息 例如:Javascript MQTT.js(mosqutio代理)-我多次收到相同的消息,javascript,angular,mqtt,Javascript,Angular,Mqtt,我有两份申请。我多次收到相同的信息 例如: app1->user_1编写消息:“我需要帮助”主题:演示 app2->显示聊天列表 app2->user_2打开列表中的聊天并订阅主题:demo,现在可以与user_1对话 app2用户_2 我需要帮助 我需要帮助 我需要帮助 我需要帮助 我需要帮助 似乎连接被创建了好几次。 似乎订阅和发布不同的主题也不起作用。附录1: let client = mqtt.connect('http://127.0.0.1:9001', {
- app1->user_1编写消息:“我需要帮助”主题:演示
- app2->显示聊天列表
- app2->user_2打开列表中的聊天并订阅主题:demo,现在可以与user_1对话
- 我需要帮助
- 我需要帮助
- 我需要帮助
- 我需要帮助
- 我需要帮助
let client = mqtt.connect('http://127.0.0.1:9001', {
clientId: "front-client",
username: "admin",
password: "admin",
});
client.on('connect', (topic) => {
client.subscribe(this.topic, (err) => {
if (!err) {}
});
});
this.mqttClient = client;
//handle incoming messages
client.on('message', (topic, message, packet) => {
this.showMessageFromMqtt(message);
});
}
sendMsgByMqtt(message: string) {
this.mqttClient.publish(this.topic + '/MSG', message, {retain: true});
}
App2:
configureMqttChannel() {
let client = mqtt.connect('http://127.0.0.1:9001', {
clientId: "front-client-angular",
username: "admin",
password: "admin"
});
// console.log("connected flag: " + client.connected);
client.on('connect', (topic) => {
// console.log("connected " + client.connected);
client.subscribe(this.topic + '/MSG', (err) => {
if (!err) {
// console.log('message sent by mqtt')
// client.publish(this.topic, '', {retain: true})
}
});
});
this.mqttClient = client;
//handle incoming messages
client.on('message', (topic, message, packet) => {
// console.log("message is " + message);
// console.log("topic is " + topic);
this.showMessageFromMqtt(message);
});
}
sendMsgByMqtt(message: string) {
this.mqttClient.publish(this.topic, message, {retain: true});
}
在浏览器控制台中:
连通真
连通真
连通真
连通真
连通真
连通真
连通真
…如果您要发布和订阅同一主题,则您的邮件必须包含一个标识符,该标识符允许您在邮件总是返回给您时过滤掉已发布的邮件 这方面的一个例子是(伪代码): 另一种解决方案是发布demo/someUniqueClientIdentifier并订阅demo/+
当你收到一条消息时,你可以使用主题名称来查看它来自哪个客户端,并以这种方式过滤掉它-这与上面的内容完全相同。注意:如果你订阅了与你发布的主题相同的主题,你将收到自己的消息。这听起来像是某种循环,但是,由于您的代码示例没有
client.publish()
,因此我们无法帮助您。
const MY_IDENTIFIER = generateSomeIdentifierUniqueToThisClient();
publish({
identifier:MY_IDENTIFIER,
data: // the actual content of your message
});
handleIncoming = data => {
// this was a message you sent
if(data.identifier === MY_IDENTIFIER) return;
// handle it
}