10

まず、すべてのプログラマーに乾杯 [ 今日 = プログラマーの日 :) ]

次に、サーバーをフロント エンドとして使用し、アプリケーションをバック エンドとして使用することが仕様で要求されるプロジェクトに取り組んでいます。このプロジェクトは、高度なスマート ホーム システムです。サーバーは、クライアントからインターネット経由で送信されるコマンドを処理し (たとえば、家の外からのリモコンのように)、それらを (通信チャネル経由で) アプリケーション (JAVA アプリケーションの使用を計画中) に送信します。アプリケーションはメイン ロジックを処理します。ハードウェアの制御 (照明など)、マイクからの読み取り (ローカル マイク)、音声認識システムとして機能するデータベースへのアクセス (オフライン) などです。

現在、私はまだ計画段階にあり、このプロジェクトに最適なテクノロジがわかりません。サーバーとしてNode.jsまたはApacheを使用し、バックエンドとしてJavaアプリケーションを使用し、アプリケーションの SRS 用に任意のSQL データベースを使用することを考えています。

この図がシステムの仕組みを明確に示していることを願っています。

ここに画像の説明を入力

主な質問は次のとおりです。

Java アプリケーションをサーバーと通信させる最善の方法は何ですか (通信チャネル [双方向でなければなりません])?

そして、この仕事のために言及されたもの以外の特定のサーバーをお勧めしますか?

これまでに頭をよぎったこと:

1- JSP とサーブレット (サーバーの作成もアプリケーションです)。しかし、サーバーにオフラインの処理をさせたくないので、Java サーブレットがハードウェア インターフェイスにアクセスできるかどうかわかりません。また、サーバーを重要な決定を下すことから分離したいと考えています (セキュリティ上の理由と、ローカル [オフライン] システムほど頻繁に使用されないため、別のレイヤー)。

2-通信チャネル :

A-共有ファイルですが、ファイルの内容が変更されたか (コマンドを受信したか)、時々変更されていないか (過度の操作) をアプリケーションに確認させたくないので、これは悪い考えです。

B- A ポートを介したプロセス間通信 (ソケット通信) が最善の解決策のようですが、運用コストと通信エラーの点でどうなるかわかりません。

使用OS: Linux Raspbian

編集:

このタスクには ZMQ+Apache で十分だと思いますが、WebServices (SOAP など) と比較してどうですか? 標準実装とセキュリティの観点から、WebServices はより優れたソリューションでしょうか?

関連するすべての提案を歓迎します、TQ

4

1 に答える 1

4

ZeroMQ は、社内コミュニケーションやその他の同様のコミュニケーション ソリューションに最適です。

特にあなたのケースでは、ZeroMQが最適であることがわかります。
理由:

  • オフライン サーバーは、Web ソリューションに依存しない必要があります。
  • 通信は信頼性が高く、双方向である可能性があり、おそらく別のパターン (pub>sub、req<>res など) も可能です。
  • メッセージがキューに入れられているため、いずれかの側を再起動しても、反対側のソケット (接続) を再起動する必要はありません。
  • 同じハードウェアだけでなく、ローカル エリア ネットワークやインターネットを介して拡張することもできます。
  • サポートの大きなコミュニティ。入り込むのは少し難しいように見えるかもしれませんが、実際には非常にシンプルです。例に行き、概念が理解されると、非常に簡単に作業できます。
  • ZeroMQ には、JavaNode.jsなど、ほとんどの一般的な言語用のドライバーが多数あります。

考慮事項:

  • パケットについて考える必要があり、データが送信されます。したがって、XML や JSON などの一部の一般的なデータ プロトコルは、良い考え方です。
  • さまざまなサービスに対する責任 - 相互に依存しすぎないようにします。または、メインのオフライン サーバーがシステムのコアである場合は、Web に面したサービスに依存しないようにして、Web 面を削除/交換/改善などできるようにします。

考慮すべきいくつかのポイント:
なぜ Java なのか、モジュラー アプローチはどうなのか? たとえば、拡張とスケーリングが必要な場合 - スマート ホーム ソリューションにセンサーを追加すると、1 つの巨大なアプリケーションを変更する必要があり、独自のニーズを持つさまざまなクライアントを維持するだけでなく、維持することも難しくなります。モジュラーな方法を考えてください - オフラインのもののためのいくつかのコア機能ですが、さまざまなセンサーと通信する多くのアグリゲーター プロセスです。これにより、さまざまなセットアップや環境のサポートが容易になり、独立したコンポーネントを改善することでシステム全体を維持できます。

于 2013-09-13T20:57:53.173 に答える