2017-03-07 119 views
0

我有一個傘形應用程序安裝程序,如the docs所述,所有編譯都很好。神經,鳳凰,GPIO?

我留下的一個問題是,Phoenix應用程序在這種情況下如何與GPIO進行交互? elixir_ale只能在目標設備上編譯,而且我不能通過Phoenix應用程序引用Nerves項目。

場景:我點擊普通按鈕切換光源。網絡請求會擊中控制器;如何引用底層的Nerves應用程序與GPIO進行交互?

回答

3

你會想創造一些充當媒介的消息代理的味道。您在基於神經的設備上運行的OTP應用程序運行在相同的BEAM上,因此您可以使用所有常規消息傳遞功能和模式。

您可以使用Phoenix通道中的pub-sub機制有效地代理JS前端和基於Nerves的設備上運行的BEAM應用程序之間的事件。有一些Phoenix通道客戶端實現可用,例如PhoenixChannelClient,您可以在任何OTP應用程序中使用該通道來實現此目的。

如果這對你所做的事情來說太重了,更簡單的選擇是在你的Nerves應用程序中全局註冊GenServer的名稱,然後直接從你的Phoenix控制器發送消息給它。

第三種解決方案可能值得考慮,它處於投資/複雜度水平上面的兩個位置之間:如果您喜歡pub-sub模型的想法,但您仍希望流程僅在內部進行通信BEAM,您可以使用pg2通過使用命名的進程組來模擬pub-sub主題和訂閱。有興趣的訂閱者進程可以加入全局命名的組,然後發佈者進程可以查詢成員列表,然後繼續發送消息。

+0

謝謝傑夫!我認爲應該有一些中介。似乎我需要閱讀各個應用程序之間的消息傳遞。 –