2017-07-31 380 views
0

在Node-Red中,我希望能够使用MQTT发送消息并等待它的响应,位于http输入节点和响应之间。我觉得画面更加相关的解释是:在Node-Red中处理HTTP请求中的MQTT通信

enter image description here

的问题是一个HTTP响应节点直接连接到输入一个不知何故,我收到后想在现场保存整个消息的一个http输入,然后在发送响应之前恢复它。问题是,显然,消息的结构是循环的,因此我不能直接将其转换为字符串,以便将其存储在上下文中。

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

您是否想过解决这个问题的其他解决方案?

谢谢!

回答

0

这有点打破了MQTT的异步性,而Pub/Sub可以被使用,这不是它的强项。

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

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

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

您可能可以使用触发器节点来处理超时问题。

+0

感谢您的回复!我不知道我可以简单地将对象消息存储在上下文中(我总是看到人们首先将它转换成字符串,所以我甚至没有想过尝试其他的东西)。它解决了我的问题! 关于超时问题,我知道如何处理它,这不会是一个真正的问题。 再次感谢! – LeChocdesGitans