在Node-Red中处理HTTP请求中的MQTT通信

时间:2017-07-31 10:33:48

标签: json http mqtt node-red

在Node-Red中,我希望能够在HTTP输入节点和响应节点之间发送消息并使用MQTT等待其响应。我认为一张图片更能说明这一点:

First, an HTTP node with a red triangle is connected to a MQTT node with a red triangle. Next, a MQTT node with a red triangle is connected to an HTTP node with no triangle.

问题是HTTP响应节点必须以某种方式直接链接到输入节点,所以我想在收到HTTP输入后将整个消息保存在上下文中,然后在发送响应之前将其恢复。问题是,显然,消息的结构是循环的,因此我不能直接将其转换为字符串,以将其存储在上下文中。

我尝试了不同的方法来解决这个问题(我看了一下:JSON.stringify, avoid TypeError: Converting circular structure to JSON我尝试使用circular-json模块,但两者都不起作用。)

1 个答案:

答案 0 :(得分:1)

这有点打破了MQTT的异步性质,而Pub / Sub可以用它并不是它的优点。

如果没有响应消息,您必须考虑会发生什么,因为无法知道其他MQTT客户端是否已连接。

HTTP请求来自哪里?如果它来自网页,那么您可以使用MQTT over Websockets直接发出请求或使用普通的Websockets,从而不再需要HTTP调用。

说过你应该能够在上下文中存储msg对象,不需要将它转换为字符串,因为默认的上下文存储引擎只是一个内存对象存储。因此,只需将对象添加到上下文中,并在响应进入时检索它。

您可以使用触发器节点执行某些操作来处理超时问题。