是否可以配置Apache Tomcat来模拟客户端在通过localhost从服务器请求数据时通常会遇到的网络延迟?我正在尝试测试Java Servlet应用程序的前端如何响应响应时间较慢的请求。
我知道我可以进入并将Thread.sleep(100)
添加到我的所有Servlet Java源文件中,但我宁愿有一个可以在Tomcat而不是在我的实际应用程序中配置的解决方案。
答案 0 :(得分:4)
您可以通过在localhost上使用代理来模拟网络延迟,这会导致延迟,带宽限制,甚至丢弃数据包。
DonsProxy将完成这项工作。 Here's一篇很好的文章,介绍如何配置它以模拟网络不良的用户。
答案 1 :(得分:1)
您可以实施servlet filter并拦截所有请求。在每个请求中,您将执行此Thread.sleep或其他内容。对您的servlet的所有请求都将被延迟。
答案 2 :(得分: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);
}
在你将放入tomcat lib目录的jar中编译它(通常是{catalina.home} / lib)。
最后在server.xml中添加阀门声明:
<Server ...>
<Service name="Catalina">
<Engine name="Catalina" defaultHost="localhost">
(...)
<Host name="localhost" ...>
<Valve className="tools.tomcat.RandomDelayValve" />
HIH