2012-06-14 6 views
3

localhost를 통한 요청에 대해 서버에서 데이터를 요청할 때 클라이언트가 일반적으로 가지고있는 네트워크 대기 시간을 시뮬레이트하도록 Apache Tomcat을 구성 할 수 있습니까? Java Servlet 애플리케이션의 프런트 엔드가 응답 시간이 느린 요청에 어떻게 반응하는지 테스트하려고합니다.Apache Tomcat에서 네트워크 대기 시간을 시뮬레이션 하시겠습니까?

모든 서블릿 Java 소스 파일에 Thread.sleep(100)을 추가 할 수는 있지만 실제로는 실제 응용 프로그램이 아닌 Tomcat에서 구성 할 수있는 솔루션이 필요합니다.

답변

4

지연 시간, 대역폭 제한 및 패킷 손실을 유발하는 로컬 호스트의 프록시를 사용하여 네트워크 대기 시간을 시뮬레이션 할 수 있습니다.

DonsProxy가 작업을 수행합니다. Here's 가난한 네트워크에서 사용자를 시뮬레이트하도록 구성하는 방법을 설명하는 좋은 기사입니다.

1

servlet filter을 구현하고 모든 요청을 차단할 수 있습니다. 각각의 요청에서이 Thread.sleep 또는 다른 것을 할 것입니다. 서블릿에 대한 모든 요청이 지연됩니다.

+0

:

마지막으로 당신이 server.xml의 밸브 선언을 추가합니다. 또는 나는 무엇인가 놓치고 있냐? 테스트 응용 프로그램과 배포 된 응용 프로그램은 서로 다른 web.xml 파일을 갖습니다. 그렇지 않습니까? – Ivan

0

밸브를 만들면 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); 
} 

이 항아리를 컴파일 당신은 바람둥이 lib 디렉토리 (보통 {가리키는 catalina.home}/lib 디렉토리)에 내려 줄게 : 내부

코드는 그런 일해야한다. 이 비록 톰캣 정말 구성 할 수 없습니다

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

HIH

+0

내 실수, 답변을 업데이트했습니다. – poussma

관련 문제