2017-07-31 24 views
0

Node-Redでは、HTTP入力ノードと応答ノードの間で、メッセージを送信してMQTTを使用してその応答を待っていたいと思います。私は絵はこれを説明するために、より関連性があると思う:Node-RedでのHTTPリクエスト内でのMQTT通信の処理

enter image description here

問題は、ノードが直接何とか入力1にリンクする必要があるHTTP応答であるので、私は受け取った後にコンテキストでメッセージ全体を保存すると考えますhttp入力を受け取り、応答を送信する前にそれを復元します。問題は明らかに、メッセージの構造は循環的なので、文脈に格納するために文字列に直接変換することはできません。

私はこの問題を解決するためにさまざまなことを試しました(私はこれを見ました:JSON.stringify, avoid TypeError: Converting circular structure to JSONと私は両方とも動作しないcircular-jsonモジュールを使ってみました)。

他にもこの問題の解決策はありますか?

ありがとうございます!

答えて

0

これは、MQTTの非同期性を幾分破壊していますが、Pub/Subは使用することができますが、それは強みではありません。

他のMQTTクライアントが接続されているかどうかを知る方法がないため、応答メッセージがないとどうなるかを考慮する必要があります。

HTTPリクエストはどこから届いていますか? Webページからのものであれば、WebSocket上のMQTTを使用してリクエストを直接または普通のWebSocketにすることができ、HTTP呼び出しの必要性を一切取り除くことができます。

msgオブジェクトをコンテキストに格納できるはずだとしたら、デフォルトのコンテキストストレージエンジンはメモリオブジェクトストア内にあるため、文字列に変換する必要はありません。したがって、コンテキストにオブジェクトを追加し、応答が来たらそれを取得するだけです。

タイムアウトの問題に対処するために、トリガーノードで何かできることがあります。

+0

返信いただきありがとうございます。私は単純に文脈でオブジェクトメッセージを格納することができないことを知りませんでした(私はいつも文字列に変換する人を見てきましたので、何かを試してみることさえ考えませんでした)。それは私の問題を解決しました! タイムアウトの問題に関して、私はそれを処理する方法を知っていますが、実際には問題にはなりません。 もう一度おねがいします! – LeChocdesGitans

関連する問題