2016-02-25 75 views
0

在Node-RED中,我們有能力創建自定義節點。這些執行的特定工作不是由開箱即用的預先提供的節點提供的。有許多社區提供這些實例。自定義節點可能希望處理某種新形式的輸入事件。讓我們想象一下,我們有一種稱爲2TinCans的新網絡技術(2個錫罐通過一個字符串連接)。如果我們希望使用它來處理請求/響應,我們可能會創建兩個新的Node-RED節點......一個處理輸入(請求)和一個處理輸出(響應)。當請求到達時,在Node-RED中運行的2TinCans服務器已在偵聽傳入請求。當收到請求時,該節點會發送一條新消息。最終,這將會到達一個2TinCans響應節點,它負責將響應發送回相應的原始請求。記住Node-RED自定義節點中的回調函數

這裏是問題出現在哪裏......我們如何維護此對話的「狀態」,以便響應節點知道將響應發送給正確的合作伙伴?

回答

1

我們需要維護來自最初響應節點可以使用的原始傳入請求節點的狀態和信息。

在Node-RED環境中,我們有許多上下文對象,包括每個節點的上下文,每個流的上下文和全局上下文。但是,架構不允許將這些用於我們的目的。本地節點上下文對我們來說沒有用處,因爲它會爲傳入請求節點保存上下文,但響應節點無法尋址。流和全局環境都是「單例」......這意味着我們保存的任何數據都會在下一次調用時被覆蓋。原則上,由於可能會有很多併發流程正在執行,因此我們可以想象兩個並行請求正在同時處理,並且它們會逐步響應對方的響應。

將正確的狀態信息傳遞給下游響應節點的正確方法是將該信息添加到沿着電線流動的消息(msg)中。這可以是屬性的形式,該屬性是響應節點可以調用以完成對話的回調JavaScript對象。