17

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

手順は次のとおりです。

  1. プロキシへのクライアント転送リクエスト
  2. サーバーへのプロキシ転送リクエスト
  3. サーバーがプロキシにリクエストを返す
  4. プロキシはクライアントにリクエストを返します。

このプロキシをどのように実装すればよいかわかりません。私が最初に考えたのは、jersey/apache httpclient を使用してリクエストをリモート サーバーに転送し、レスポンスをクライアントに返す tomcat アプリケーションを実装することでした。

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

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

4

2 に答える 2

11

サーブレットとして実装することはできず、HTTP クライアントの形式を使用する理由はありません。

機能のないプロキシ サーバーは、非常に単純なものです。

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

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

または、Apache SQUID を使用します。

于 2013-05-09T00:08:51.167 に答える
8

LittleProxyを確認してください。着信および発信要求用のクラスが組み込まれています。サーブレットで HTTP リクエストを処理する方法と同じように、コードを記述できます。

于 2013-11-12T15:53:59.903 に答える