1

ノードの非同期処理を利用するために、Java Webサーバーの前にnode.jsを配置することに取り組んでいます-いくつかの軽い処理とその他のタスクを実行し、最終的にsocket.ioを実行します。アプリの実際の作業のほとんどは Java で行われ、これまですべてのリクエストを処理するために jetty ウェブサーバーを使用してきました。最初は node-http-proxy を使用して転送することを検討していました (おそらく変更されたリクエスト)。さらに検討した結果、http 要求を転送する代わりに、RabbitMQ や node-amqp ライブラリなどを使用して、より堅牢な通信プロトコルを使用できることに気付きました。これにより、java から node および socket.io を介してブラウザに戻るプッシュのサポートも向上します。

私の質問は次のとおりです。ノードですべての受信リクエストを処理するようになりましたが、jetty 内で Java を実行し続ける理由はありますか? そうでない場合は、文字通り、コマンド ラインのメイン メソッドから Java コードを実行する必要がありますか? 最後に、このアプローチに大きな欠陥はありますか?

私たちのアプリケーションは単一ページのアプリケーションであり、最初にページをロードするための最初のリクエストを超えて、それ以降のすべての呼び出しは安静な json 呼び出しであり、amqp 経由で簡単に転送できるはずです。

4

1 に答える 1

2

使い方によっては、Jetty や Tomcat を Java プログラム コンテナーとして使用する利点はありません。Jetty または Tomcat には、HTTP 要求を受信して​​ワーカー Java プログラムに転送するという利点があります。しかし、あなたの場合、リクエストは NodeJS によって受信され、MQ に転送されます。Javaワーカーは積極的に MQ に接続し、タスクを取得して完了時に結果を送信します。したがって、ここではスタンドアロン Java を使用することをお勧めします。また、リクエストが多くなったときに、より多くのタスクを処理するためにワーカーがクラスター化されるため、多くのスタンドアロン Java プログラムを簡単に起動できます。NodeJS と MQ は複数の要求を非同期にキャッシュでき、Java ワーカーはそれらの同期を処理できます。例: 1 つの NodeJS サーバー、1 つの MQ サーバー、3 つの Java ワーカー サーバー。

于 2013-11-21T02:14:59.453 に答える