【问题标题】:Simulate network latency with Apache Tomcat?使用 Apache Tomcat 模拟网络延迟?
【发布时间】:2012-06-14 17:46:03
【问题描述】:

是否可以将 Apache Tomcat 配置为模拟客户端在通过 localhost 从服务器请求数据时通常具有的网络延迟?我正在尝试测试 Java Servlet 应用程序的前端如何响应响应时间较慢的请求。

我知道我可以进去并将Thread.sleep(100) 添加到我所有的 Servlet Java 源文件中,但我宁愿有一个可以在 Tomcat 中而不是在我的实际应用程序中配置的解决方案。

【问题讨论】:

    标签: java tomcat networking servlets


    【解决方案1】:

    您可以通过在本地主机上使用代理来模拟网络延迟,这会引入延迟、带宽限制甚至丢包。

    DonsProxy 将完成这项工作。 Here's 一篇很好的文章,描述了如何配置它以模拟网络不佳的用户。

    【讨论】:

    【解决方案2】:

    您可以实现servlet filter 并让它拦截所有请求。在每个请求中,您都将执行此 Thread.sleep 或其他操作。对您的 servlet 的所有请求都将被延迟。

    【讨论】:

    • 这在 Tomcat 中并不是真正可配置的。还是我错过了什么?测试应用程序和部署的应用程序会有不同的 web.xml 文件,不是吗?
    【解决方案3】:

    这在 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);
    }
    

    将其编译到一个 jar 中,然后放入 tomcat lib 目录(通常是 {catalina.home}/lib)。

    最后在你的 server.xml 中添加阀门声明:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-04
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 2017-12-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多