フロントエンド(sinatra)がこのデータをjson api経由で表示することを可能にする一方で、バックエンドが常に異なるセンサーをポーリングするアプリケーションを設計したいと思っています。結果はhtmlで表示されます。データのスマートなポーリングを可能にする方法
このようなアプリケーションの開発にはどのような考慮事項がありますか、最適なスケーリングとメンテナンスの容易性のためにアプリケーションをどのように構築する必要がありますか。
私の最初の考えは、センサーが適切なエンドポイントにリクエストを受け取るたびにポーリングするようにしていますが、静かな速度が遅くなることがあります。
私の2番目の考えは、バックグラウンドプロセス(またはスレッド)がセンサをポーリングしてsinatraの値を格納することです。リクエストが受信されると、sinatraはキャッシュされた値のバックグラウンドプロセスをポーリング(またはスレッドコードからプル)し、クライアントに提示することができます。
私は二番目の考えをもっと気に入っていますが、私は "背景アプリケーション"をどのように開発して、クライアントに提示するデータをsinatraがポーリングできるかはわかりません。もう1つのオプションは、sinatraがセンサーポーリングコードをスレッド化して、別のプロセスから要求するのではなく、同じプロセス内の値を単純に取得できるようにすることです。このアプリケーションは、異なるリレーの自動化や、オフに基づいてセンサやシナトラの責任となりますことを
によりノートでは、ユーザーにセンサーの状況を中継するための唯一の責任です。私はバックエンド(自動化+センサー情報)をフロントエンド(sinatra)のバックグラウンドプロセス/デーモンで分離するのが理想的だと思いますが、私はsinatraのデータをどのように取得するのかはわかりません。
どのように私はこれを構成することができますか?可能であれば、私が採用し変更することができるアイデアを単に表示するサンプルアプリケーションにも感謝します。
おかげ
編集::私はあなたがネットワーク上でのオブジェクトのリモート呼び出しを行うことができますdrb
(分散ルビーhttp://ruby-doc.org/stdlib-1.9.3/libdoc/drb/rdoc/DRb.html)を発見した、もう少し研究した後
。これは、デーモンがリレーを自動化し、センサーを読み込んでクラスオブジェクトに値を格納し、drbにクラスオブジェクトを渡して、sinatraがリモートオブジェクトのgetterを呼び出して取得できるようにすることで、この問題に適した解決策ですデーモンからのデータを日付に変換します。これは私が最初にやろうとしたことです。
あなたはどう思いますか?このようなアプリケーションにはこれはお勧めですか?
。それは完全に投票する必要性を取り除くでしょう。 [faye-websocket](https://github.com/faye/faye-websocket-ruby) –
@maxple私は 'DRB'を見つけて私の質問の一部を編集しました。あなたはDRBがシナトラと共に使用されることが推奨されると思いますか?理想的には、リモートプロセスからデータを取得して、別のプロセスで実行しているsinatraがクライアントにデータを提示できるようにする方法を探しています。 –
私はDRBについて知らなかったので、わかりません。しかしサーバー<=>のサーバー通信にWebソケットを使用することもできます(センサーマシンでWebアプリケーションを実行できる場合) –