2013-05-08 11 views
12

複数のクライアントからの要求をリモートサーバーにプロキシするHTTPプロキシサーバーアプリケーションを実装する必要があります。ここでJava HTTPプロキシサーバー

は、手順は次のとおりです。

  1. クライアント転送要求プロキシ
  2. プロキシ転送要求に対するサーバへ
  3. サーバーのリターンはプロキシリターンがクライアントに要求するプロキシ
  4. を要求します。

私はこのプロキシをどのように実装するべきか分かりません。私の最初の考えは、jersey/apache httpclientを使用してリモートサーバーに要求を転送し、クライアントに応答を返すtomcatアプリケーションを実装することでしたか?

このようなプロキシサーバーを実装するより良い方法はありますか?

プロキシは複数のスレッドを処理する必要があります。

答えて

9

サーブレットとして実装することはできません。どのような形式のHTTPクライアントを使用する必要はありません。

  1. 接続を受け入れ、それのためのスレッドを開始:

    特徴のプロキシサーバは、本当に簡単なことです。

  2. クライアントからの要求を空行まで読み取ります。
  3. GETコマンドまたはCONNECTコマンドなどを抽出し、指定されたホストに接続します。
  4. これが失敗した場合は、適切なHTTPエラー応答を送り返し、ソケットを閉じて忘れてしまいます。
  5. それ以外の場合は、各方向に1つ、バイトをコピーするために2つのスレッドを開始します。空想何もない、ただ

    while ((count = in.read(buffer)) > 0) 
    { 
        out.write(buffer, 0, count); 
    } 
    
  6. それらのソケットの一つは、EOS、シャットダウン出力のために他のソケットを読み込み、EOSを持ってスレッドを終了します。
  7. EOSのソースであったソケットが既に出力のためにシャットダウンされている場合は、両方を閉じます。

またはApache SQUIDを使用してください。

8

チェックアウトLittleProxy - 受信要求と送信要求のための組み込みクラスがあります。サーブレットでHTTPリクエストを処理する方法と同様にコードを書くことができます。

+0

はい、実際にサーブレットAPIに組み込まれていないCONNECTサポートが組み込まれています –

関連する問題