【问题标题】:Handling MQTT communication inside HTTP request in Node-Red在 Node-Red 中处理 HTTP 请求中的 MQTT 通信
【发布时间】:2018-12-24 02:12:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: json http mqtt node-red


    【解决方案1】:

    这在一定程度上打破了 MQTT 的异步特性,虽然可以使用 Pub/Sub,但这并不是它的强项。

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

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

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

    您也许可以对触发节点做一些事情来处理超时问题。

    【讨论】:

    • 感谢您的回复!我不知道我可以简单地将对象消息存储在上下文中(我总是看到人们首先将它转换为字符串,所以我什至没有想过尝试其他东西)。它解决了我的问题!关于超时问题,我知道如何处理,这不会是一个真正的问题。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    相关资源
    最近更新 更多