2017-03-07 10 views
0

설명 된대로 우산 앱 설정이 있습니다. 모두 컴파일 중입니다.신경, 피닉스, GPIO?

내가 남긴 한 가지 질문은이 시나리오의 Phoenix 앱이 GPIO와 어떻게 상호 작용하는지입니다. elixir_ale은 대상 장치에서만 컴파일되며 피닉스 앱을 통해 Nerves 프로젝트를 참조 할 수는 없습니다.

시나리오 : 조명 버튼을 클릭하여 광원을 전환합니다. 웹 요청이 컨트롤러에 도달합니다. GPIO와 상호 작용하기 위해 기본 Nerves 애플리케이션을 참조하는 방법은 무엇입니까?

답변

3

중개자 역할을하는 메시지 브로커의 풍미를 만들고 싶습니다. 신경 기반 장치에서 실행하는 OTP 응용 프로그램은 동일한 BEAM에서 실행되므로 모든 일반 메시징 기능과 패턴을 사용할 수 있습니다.

Phoenix 채널의 pub-sub 메커니즘을 사용하여 JS 프론트 엔드와 Nerves 기반 장치에서 실행되는 BEAM 애플리케이션 간의 이벤트를 효과적으로 브로커 할 수 있습니다. 이 목적을 위해 OTP 응용 프로그램에서 사용할 수있는 PhoenixChannelClient과 같은 Phoenix 채널 클라이언트 구현을 사용할 수 있습니다.

너무 무거울 경우 Nerve 앱에 GenServer의 이름을 전체적으로 등록한 다음 Phoenix 컨트롤러에서 직접 메시지를 보내면됩니다.

투자/복잡성 수준에서 위의 두 가지 사이에있는 고려해야 할 세 번째 솔루션 : pub-sub 모델의 아이디어가 마음에 들지만 프로세스가 내부적으로 만 통신하기를 원한다면 빔, pg2을 사용하여 명명 된 프로세스 그룹을 사용하여 pub-sub 항목 및 구독을 에뮬레이션 할 수 있습니다. 관심있는 구독자 프로세스는 전역 적으로 명명 된 그룹에 가입 할 수 있으며 게시자 프로세스는 구성원 목록을 쿼리 한 다음 메시지를 보내도록 진행할 수 있습니다.

+0

제프! 감사합니다. 나는 중개자가 있어야한다고 생각하고 있었다. 우산 앱 사이를 지나가는 메시지를 읽어야 할 것 같습니다. –