3

Apache Tomcat を構成して、クライアントがローカルホストを介した要求のためにサーバーからデータを要求するときに通常発生するネットワーク遅延をシミュレートすることは可能ですか? Java サーブレット アプリケーションのフロント エンドが、応答時間が遅い要求にどのように応答するかをテストしようとしています。

すべてのサーブレット Java ソース ファイルに追加できることはわかってThread.sleep(100)いますが、実際のアプリケーションではなく、Tomcat で構成できるソリューションが必要です。

4

3 に答える 3

4

ローカルホストでプロキシを使用してネットワーク遅延をシミュレートできます。これにより、遅延、帯域幅の制限、さらにはパケットのドロップが発生します。

DonsProxy がその役割を果たします。 これは、貧弱なネットワークでユーザーをシミュレートするように構成する方法を説明する優れた記事です。

于 2012-06-14T18:13:46.573 に答える
1

これは、Tomcatでバルブを作成することで簡単に実行できます。

TomcatからValveBaseクラスを拡張するクラスを作成します。

内部のコードは次のようになります。

/**
 * {@inheritDoc}
 */
@Override
public void invoke(final Request request, final Response response) 
                   throws IOException, ServletException {

    if (randomDelay != 0) {
        long delay = minDelay + randomizer.nextInt(randomDelay);
        try {
            if (LOGGER.isDebugEnabled()) {
                LOGGER.debug("sleeping for " + delay + " ms");
            }
            Thread.sleep(delay);
        } catch (InterruptedException e) {
            if (LOGGER.isDebugEnabled()) {
                LOGGER.debug("someone wake me up : " + e.getMessage());
            }
        }
    }

    // let's continue !
    getNext().invoke(request, response);
}

tomcat libディレクトリ(通常は{catalina.home} / lib)にドロップするjarファイルにコンパイルします。

最後に、server.xmlにバルブ宣言を追加します。

<Server ...>
  <Service name="Catalina">
   <Engine name="Catalina" defaultHost="localhost">
     (...)
     <Host name="localhost" ...>
       <Valve className="tools.tomcat.RandomDelayValve" />

こんにちは

于 2012-10-22T17:50:32.733 に答える
1

サーブレット フィルターを実装して、すべての要求をインターセプトすることができます。各リクエストで、この Thread.sleep などを実行します。サーブレットへのすべてのリクエストが遅延します。

于 2012-06-14T17:54:48.687 に答える