2017-02-25 14 views
0

프론트 엔드 (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를 호출하여 얻을 수 있도록이 문제에 대한 적절한 해결책이 될 수 있습니다 데몬의 데이터를 최신으로 유지합니다. 이것은 내가 처음에 시도하려고했던 것입니다.

너희들은 어떻게 생각하니? 이러한 응용 프로그램에 적합합니까?

+0

당신은 양방향 통신에 WebSocket을 사용해야합니다. 그것은 전적으로 설문 조사의 필요성을 제거합니다. [faye-websocket] (https://github.com/faye/faye-websocket-ruby) –

+0

@maxple 나는 DRB를 발견하고 내 질문의 일부를 편집했습니다. 당신은 DRB가 sinatra와 함께 사용하는 것이 바람직하다고 생각합니까? 이상적으로 나는 다른 프로세스에서 실행중인 sinatra가 클라이언트에 데이터를 제공 할 수 있도록 원격 프로세스에서 데이터를 쉽게 얻을 수있는 방법을 찾고 있습니다. –

+0

나는 DRB에 대해 몰랐다. 그래서 나는 모른다. 그러나 서버 <=> 서버 통신용 웹 소켓을 사용할 수도 있습니다 (센서 시스템에서 웹 응용 프로그램을 실행할 수있는 경우) –

답변

0

나는 위에서 언급 한 요구 사항을 충족시키기 위해 Sinatra, DRB 및 Daemons와 함께하기로 결정했습니다.

웹 프런트 엔드는 자체 프로세스로 실행되며 백엔드와의 DRB 상호 작용을 통해 통계 정보를 제공합니다. 이렇게하면 클라이언트에 대한 빠른 응답 시간을 허용하고 프론트 엔드 코드와 백엔드 코드를 구분할 수 있습니다.

백엔드는 자체 프로세스에서 실행되며 업데이트를 위해 지속적으로 센서를 폴링하고 게터를 사용하여 클래스 객체로 저장하므로 Sinatra가 필요할 때 Sinatra가 DRB를 통해 정보를 가져올 수 있습니다. 또한 프로젝트별로 자동화 된 정보를 수집합니다.

마지막으로 백엔드 및 프론트 엔드는 Daemons 랩퍼로 랩핑되므로 프로젝트가 충돌하거나 종료 될 경우 데몬을 시작, 재시작, 중지, 실행 상태 및 자동 재시작 기능을 가질 수 있습니다.

소스 정보 :

http://phrogz.net/drb-server-for-long-running-web-processes

http://ruby-doc.org/stdlib-1.9.3/libdoc/drb/rdoc/DRb.html

http://www.sinatrarb.com/

https://github.com/thuehlinger/daemons