2017-03-07 12 views
0

私はthe docsと記載されているような傘アプリの設定をしており、すべてがうまくコンパイルされています。神経、フェニックス、GPIO?

私が残している1つの質問は、このシナリオのPhoenixアプリケーションがGPIOとどのように作用するのでしょうか? elixir_aleはターゲットデバイスでのみコンパイルされ、Phoenixアプリケーション経由でNervesプロジェクトを参照することはできません。

シナリオ:光源を切り替えるには、プロンプトボタンをクリックします。 Webリクエストがコントローラにヒットします。 GPIOと対話するために基礎となるNervesアプリケーションをどのように参照するのですか?

答えて

3

あなたは、仲介者として機能するメッセージブローカーの風味を作りたいと思うでしょう。 Nervesベースのデバイスで実行するOTPアプリケーションは同じBEAM上で実行されるため、すべての通常のメッセージング機能とパターンを利用できます。

フェニックスチャンネルでpub-subメカニズムを使用すると、JSフロントエンドとNervesベースのデバイスで実行されているBEAMアプリケーション間のイベントを効果的にブローカブルにすることができます。この目的のために任意のOTPアプリケーションから使用できるPhoenixChannelClientのような利用可能なPhoenixチャネルクライアント実装があります。

これはあまりにも重いので、NerveアプリにGenServerという名前をグローバルに登録して、Phoenixコントローラから直接メッセージを送信するのが簡単な方法です。

投資/複雑さのレベルの上の2つの間のどこかにあると考える価値のある第3の解決策:あなたがpub-subモデルのアイデアが気に入っていても、プロセスが内部BEAMでは、pg2を使用して、名前付きプロセスグループを使用してpub-subトピックとサブスクリプションをエミュレートできます。興味のあるサブスクライバプロセスは、グローバルに名前のついたグループに参加することができ、パブリッシャプロセスはメンバの一覧を照会してから、メッセージを送信することができます。

+0

ありがとう、ジェフ!私はいくつかの仲介者があるべきだと思っていた。私は傘のアプリケーションの間を通るメッセージを読む必要があるようだ。 –