10

センサーがトリガーされるたびにデータをデータベースに挿入するサーバーに X 個のアクティビティ センサーが接続されています。私がやろうとしているのは、施設の設計図 (svg) を使用して Web インターフェイスを作成することです。センサーがトリガーされるたびに、db 挿入に加えて、設計図に何らかのアラートを表示したいと考えています。そのためには、サーバーへの接続を開いたままにしておく必要があると思います。

Web ソケットを使用することを考えていましたが、サーバーからデータを取得するだけでよいため、やり過ぎかもしれません。しかし、1 秒ごとに ajax 呼び出しを実行するのもあまり効率的ではないように思えます。他の選択肢はありますか?

ありがとうございました

4

5 に答える 5

1

私は同様の問題を抱えており、これについて多くの調査を行いました。私が理解しているように、3つの主なオプションがあります。

  1. 短いポーリング: JavaScript クライアントが毎秒 ping を実行するエンドポイントを用意します。ping は通信に最大 1 秒の遅延を追加し、実装方法によっては、エンドポイントが毎秒データベースにクエリを実行し、不要なオーバーヘッドを追加する可能性があるため、これは最悪のオプションです。
  2. 長いポーリング: a) イベントが発生するか、b) 接続がタイムアウトするまで接続を保持する、javascript クライアントが ping するエンドポイントを用意します。エンドポイントが応答を返すと、クライアントはイベント情報を取得します。エンドポイントが応答を返さない場合、イベントは発生しておらず、クライアントは新しい要求を送信します。非同期のプロセス間通信層 (0MQ など) を使用して、ポーリングを行わずにメッセージを送信すると仮定すると、イベントがクライアントへの応答をすぐにトリガーできるため、これは適切なオプションです。
  3. Websocket : JavaScript クライアントを Websocket サーバーに接続します。これにより、イベントがトリガーされるとすぐにクライアントにメッセージが送信されます。

リクエスト/レスポンスのオーバーヘッドなしでイベントの即時通信に対応するため、websocket が最適なオプションだと思います。そして最も重要なことは、これがまさに websocket が行うように設計されていることです! そのため、このソリューションを使用すると、おそらく最小限のカスタム コードを記述する必要があります。

于 2013-08-10T18:29:34.113 に答える
1

あなたにぴったりの商用サービスが 2 つあります。

  • Firebase - JavaScript 階層型データベースおよびリアルタイム メッセージング/同期プラットフォームであり、WebSocket を使用し、他のフォールバックがあります

  • PubNub - リアルタイムのメッセージ パッシングおよびキュー システムで、WebSocket を使用します。

于 2013-08-14T17:46:07.223 に答える
1

WebSocket は確かにやり過ぎではありません。それどころか。WebSocket を使用すると、双方向の通信チャネルが得られます。これは、サーバーが適切と思われるときはいつでも通信を開始できることを意味します (たとえば、センサー データが変更されたとき)。

以前のプロジェクトでは、node.jsをsocket.ioと一緒に使用して、50 以上のセンサーを監視しました。データはブラウザでリアルタイムに更新されました。データは Smoothie.js を使用して視覚化されました。センサー値が更新されるたびに、ブラウザーに通知されました。1 分に 1 回しか更新されないセンサーもあれば、1 秒に 1 回しか更新されないセンサーもあります... ポーリングは、まだ更新されていないセンサーからでも、すべてのセンサーのすべてのデータを取得するため、やり過ぎでした。

于 2013-08-10T18:48:00.220 に答える