2017-03-07 4 views
0

J'ai une configuration d'application parapluie comme décrit the docs, et tout compile bien.Nerfs, Phoenix, GPIO?

Une question qui me reste est de savoir comment l'application Phoenix dans ce scénario interagit avec GPIO? elixir_ale ne compilera que sur le périphérique cible, et je ne peux pas référencer le projet Nerves via l'application Phoenix. Scénario: Je clique sur le bouton proverbial pour basculer une source de lumière vers le bas. La requête Web va frapper le contrôleur; comment puis-je référencer l'application Nerves sous-jacente pour interagir avec le GPIO?

Répondre

3

Vous voudrez créer une certaine saveur de courtier de messages qui agit en tant qu'intermédiaire. Les applications OTP que vous exécutez sur un périphérique basé sur nerfs s'exécutent sur le même BEAM afin que toutes les fonctionnalités et les modèles de messagerie réguliers sont disponibles pour vous.

Vous pouvez utiliser le mécanisme pub-sub dans les canaux Phoenix pour gérer efficacement les événements entre un frontend JS et les applications BEAM s'exécutant sur votre périphérique basé sur les nerfs. Il existe des implémentations de client de canal Phoenix disponibles telles que PhoenixChannelClient que vous pouvez utiliser à partir de n'importe quelle application OTP à cette fin. Si cela est trop lourd pour ce que vous faites, une alternative plus simple serait d'enregistrer globalement le nom d'un GenServer dans votre application Nerves et de lui envoyer des messages directement à partir de votre contrôleur Phoenix. Une troisième solution qui mérite d'être considérée est quelque part entre les deux ci-dessus au niveau de l'investissement/de la complexité: si vous aimez l'idée du modèle pub-sub mais vous voulez toujours que les processus communiquent uniquement en interne dans le BEAM, vous pouvez utiliser pg2 pour émuler des sous-rubriques et des abonnements à l'aide de groupes de processus nommés. Les processus d'abonné intéressés peuvent rejoindre des groupes nommés globalement, les processus d'éditeur pouvant alors interroger la liste des membres et ensuite leur envoyer des messages.

+0

Merci Jeff! Je pensais qu'il devrait y avoir un intermédiaire. Il semble que j'ai besoin de lire sur le passage des messages entre les applications parapluie. –