프론트 엔드 (sinatra)가이 데이터를 json api를 통해 보거나 단순히 표시함으로써 백엔드가 지속적으로 다른 센서를 폴링하는 애플리케이션을 설계하고 싶습니다. 결과는 html로 표시됩니다.sinatra가 데이터를 멋지게 폴링하는 방법
이러한 응용 프로그램을 개발할 때 고려해야 할 사항과 최상의 확장 및 유지 관리 용이성을 위해 응용 프로그램을 구성하는 방법은 무엇입니까?
나의 첫 번째 생각은 적절한 엔드 포인트에 대한 요청을받을 때마다 센서에 폴링을 허용하는 것입니다. 그러나 이것은 몇 초 만에 몇 초 만에 자신을 업데이트하는 방식을 특히 조용히 느리게 볼 수있는 것처럼 보입니다.
나의 두 번째 생각은 백그라운드 프로세스 (또는 스레드)가 센서를 폴링하고 sinatra에 대한 값을 저장하는 것입니다. 요청이 수신되면 sinatra는 캐시 된 값에 대한 백그라운드 프로세스를 단순히 폴링 (또는 스레드 된 코드에서 풀)하거나 클라이언트에 제시 할 수 있습니다.
나는 두 번째 생각을 더 좋아하지만, "배경 응용 프로그램"을 어떻게 개발할 것인지 확신 할 수 없으므로 sinatra가 클라이언트에게 제시 할 데이터를 폴링 할 수 있습니다. 다른 옵션은 sinatra가 센서 폴링 코드를 스레드하여 다른 프로세스에서 요청하지 않고 동일한 프로세스 내부의 값을 간단히 가져올 수 있도록하는 것입니다. 이 응용 프로그램은 또한 다른 릴레이의 자동화 및 기반으로 센서와시나에 대한 책임 것
때문에 노트는 사용자에게 센서의 상태를 중계 만 책임이 있습니다. 백엔드 (자동화 + 센서 정보)를 frontend (sinatra)의 백그라운드 프로세스/데몬에서 분리하는 것이 이상적이라고 생각하지만 sinatra에 대한 데이터를 가져 오는 방법을 모르겠습니다.
누구나 내가 구조화 할 수있는 방법에 대한 의견이 있으십니까? 가능한 경우 간단하게 채택하고 수정할 수있는 아이디어를 표시하는 샘플 응용 프로그램도 감사하게 생각합니다.
감사
편집 :
내가 drb
발견 한 좀 더 연구 네트워크를 통해 객체에 대한 원격 호출을 할 수 있습니다 (분산 루비 http://ruby-doc.org/stdlib-1.9.3/libdoc/drb/rdoc/DRb.html) 후. 이것은 데몬이 릴레이를 자동화하고 센서를 읽고 클래스 객체에 값을 저장 한 다음 drb에 클래스 객체를 표시하여 원격 객체의 getter를 호출하여 얻을 수 있도록이 문제에 대한 적절한 해결책이 될 수 있습니다 데몬의 데이터를 최신으로 유지합니다. 이것은 내가 처음에 시도하려고했던 것입니다.
너희들은 어떻게 생각하니? 이러한 응용 프로그램에 적합합니까?
당신은 양방향 통신에 WebSocket을 사용해야합니다. 그것은 전적으로 설문 조사의 필요성을 제거합니다. [faye-websocket] (https://github.com/faye/faye-websocket-ruby) –
@maxple 나는 DRB를 발견하고 내 질문의 일부를 편집했습니다. 당신은 DRB가 sinatra와 함께 사용하는 것이 바람직하다고 생각합니까? 이상적으로 나는 다른 프로세스에서 실행중인 sinatra가 클라이언트에 데이터를 제공 할 수 있도록 원격 프로세스에서 데이터를 쉽게 얻을 수있는 방법을 찾고 있습니다. –
나는 DRB에 대해 몰랐다. 그래서 나는 모른다. 그러나 서버 <=> 서버 통신용 웹 소켓을 사용할 수도 있습니다 (센서 시스템에서 웹 응용 프로그램을 실행할 수있는 경우) –