使用 API 与 MQTT 发布者/订阅者通信

communicating with MQTT publisher / subscriber using an API

我有一个用 Node JS 编写的 MQTT 发布者和订阅者。

我想知道是否可以以 API 的形式使用它,我们可以使用 PostMan 连接并发布消息。

这是我的发布者代码:

Publisher.js:

const mqtt = require('mqtt');
let client = mqtt.connect('mqtt://broker.hivemq.com');


client.on('connect', () =>{
    console.log(`MQTT Client Connected Successfully!`);
    client.publish('connected', `${true}`);
});

这是我的订阅者代码: Subscriber.js:

const mqtt = require('mqtt');
let client = mqtt.connect('mqtt://broker.hivemq.com');

let connected = false;


client.on('connect', () =>{
    console.log(`MQTT Client Connected Successfully!`);
    client.subscribe('connected');
});



client.on('message', (topic, message) =>{
    if(topic === "connected"){
      return handleGarageConnected(message);
    }

    console.log("No Handler for Topic %s", topic);

});

我希望能够使用我创建的 API 通过 Internet 与发布者/订阅者通信。

谢谢。

MQTT 是异步协议,HTTP 是同步协议。

可以将它们结合起来,但需要对两者都有很好的理解。

例如订阅的消息可以随时到达,因此假设您将其映射到 GET HTTP 请求,它应该是什么 return?

  • 最后一条消息
  • 阻止直到下一条消息(适当的超时)
  • 之前的所有留言

您可以创建一个功能,在 publisher.js 中发布所需的主题并将其导出。这样你就可以在任何其他模块中使用了。

Publisher.js

const mqtt = require('mqtt');
let client = mqtt.connect('mqtt://broker.hivemq.com');


client.on('connect', () =>{
    console.log(`MQTT Client Connected Successfully!`);
    client.publish('connected', `${true}`);
});

module.exports = {

    publishTopic : function(payload){
      client.publish('randomTopic');
    }
}

您可以为您的 APIS 创建另一个文件,您可以在其中像这样导入导出的函数,

const mqttWrapper = require('./Publisher.js');

module.exports = {
    randomApi : function (req, res) {
        mqttWrapper.publishTopic("message");   
    }    
}