1

作業中のアプリケーションの設計について質問があります。

ゲームサーバーのような、24時間年中無休でソケットを開いたモノリシックJavaアプリケーションを作成しました。モジュール式のサーブレット/ページベースのWebアプリケーションではなく、単一のjarアプリケーションだと言っているだけです。

ここで、このアプリケーションにRESTfulAPIを追加したいと思います。したがって、人々/クライアントは、特定の情報を取得するために私のアプリケーションにHTTPリクエストを行うことができます。私のJavaアプリケーションはモノリシックな性質を持っているため、これを実装する方法がわかりません。もう1つの重要なこと:1秒あたり複数のリクエストを期待しているので、既存のhttpサーバーにリクエストを処理させ、何らかの方法でそれらをアプリに転送して応答を設定し、httpサーバーに送信させることができれば便利です。もう一度。

私が考えたいくつかのこと:

  • アプリケーションをtomcatアプリケーションでラップしますが、tomcatが要求に応じてサーブレットにマッピングする代わりに、アプリケーションを継続的に実行できるかどうかはわかりません。

  • ソケットを開き、着信httpリクエストを自分で解析します(または、おそらくそのためのライブラリがありますか?)。これがパフォーマンスに影響を与えるのではないかと心配しています。トラフィックが多い場合に最適化されているため、既存のhttpサーバーを使用することをお勧めします。

  • 既存のhttpサーバーを使用してリクエスト(apache、lighttpなど)を処理し、scgiなどを介してリクエストをアプリに転送するか、XMLRPCを介して転送できるサーバーを使用します。これを行うための他のテクノロジー/プロトコルはありますか?

これを処理する方法について何かアドバイスはありますか?ありがとう!

4

1 に答える 1

0

RESTfulサービスエンドポイントを元のアプリケーションから可能な限り切り離します。これにより、スケーリング(RESTエンドポイントに複数のサーバーを追加)できるだけでなく、RESTAPIを直接変更せずに元のアプリケーションを変更することもできます。

Clients <== REST (HTTP) ==> RESTful endpoint <== legacy (sockets) ==> Legacy backend

したがって、RESTサーバーはクライアントのサービスプロバイダーの1つですが、同時に元のバックエンドのクライアントも表します。

RESTful APIを設計してから、RestletなどのJava用の既存のRESTフレームワークの1つを選択し、RESTサービス自体を実装します。同時に、ソケットを使用して、RESTサーバーと元のバックエンドの間にゲートウェイの実装を開始できます。

rest <=> backendスケーラビリティとパフォーマンスに注意を払い(つまり、ブリッジに接続プールを使用し、着信APIリクエストごとにソケットを生成しないようにしたい場合があります)、HTTPの考えられる利点についても考えてください。バックエンドアプリケーションロジックで許可されている限り、キャッシュなどを使用できると便利な場合があります。

于 2011-01-07T15:23:07.783 に答える