2011-01-07 11 views
1

私が取り組んでいるアプリケーションの設計について質問があります。HTTPサーバーからアプリケーションへのHTTP RESTful APIリクエストの転送

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

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

私が考えているいくつかのもの:私はTomcatがリクエストに応じて、サーブレットに代わりマッピングの連続したアプリケーションを実行できるかどうかはわからないが、

  • は、Tomcatアプリケーションで自分のアプリケーションを包みます。

  • ソケットを開き、入ってくるHTTPリクエストを自分で解析します(またはそれには適切にlibがありますか?)。私はこれがパフォーマンスに影響を与える恐れがあり、トラフィックが多いために最適化されているため、既存のHTTPサーバーを使用することになります。

  • リクエスト(apache、lighttp、...)を処理し、scgiのようなものを介してリクエストをアプリケーションに転送したり、XMLRPC経由で転送できるサーバーを使用したりするために、これを行うための他の技術/プロトコルはありますか?

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

答えて

0

私はRESTfulサービスエンドポイントをできるだけ元のアプリケーションから切り離しています。これにより、RESTエンドポイント用に複数のサーバーを追加するだけでなく、REST APIを直接変更することなく元のアプリケーションを変更することができます。

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

だからあなたのRESTサーバは、一方では、あなたのクライアントのためのサービスプロバイダであるが、あなたの元バックエンドのクライアントも同時に表しています。

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

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

関連する問題