1

我部署的服务器有时响应时间很长,而在本地主机上工作和开发时,所有调用都非常快。

由于资源加载时间过长的问题,这使我的应用程序在部署几次后进入意外行为。

我想在本地测试中模拟与真实服务器的不良连接,因此我想为每个请求响应添加一个随机延迟,我的第一个想法是在 servlet 中使用 Thread.sleep:

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    //add delay before processing request
    if (DELAY > 0){
        int delay;
        if (RANDOMIZE){
            delay = Random.nextInt(DELAY);
        } else {
            delay = DELAY;
        }
        try {
            Thread.sleep(delay);
        } catch (InterruptedException e1) {
            logger.error(e1);
        }
    }
...

但是我已经读到不应在 servlet 中使用 Thread.sleep() ,但是这种劝阻的上下文及其解决方案与我的情况截然不同,我可以在这种情况下使用 thread.sleep() 吗?

编辑:这当然只适用于本地和客户端在本地测试中有点紧张......我只是想模拟我在现实中遇到的坏网络!

4

2 回答 2

4

我认为这整个方法是有缺陷的。我不会引入随机延迟(您将如何重复测试用例?)。你可以介绍 a Thread.sleep(),但我不会。这会在您的生产代码中吗?是否可配置?如果它在生产中意外打开会怎样?

我宁愿设置一个具有您生产环境的确切特征的测试服务器。这样,您不仅可以有效地调试,还可以构建一个回归测试套件,让您能够有效地开发,了解应用程序在生产中的表现。

如果您的用户在地理上不同,也许对上述情况的一个让步是在客户端和服务器之间引入网络延迟(视情况而定)。这通常使用网络上的硬件设备完成,不会影响您的代码或配置。

于 2013-01-11T11:33:53.677 回答
0

我这样做是为了延迟:

response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
    out.println("<meta http-equiv=\"Refresh\" content=\"3;url=home.jsp/\">");
}

请记住,incontent=\"3;url=home.jsp/\"3延迟秒数,并且home.jsp是在给定秒数之后要转到的页面。

于 2017-10-20T15:01:29.783 回答