长时间运行的 http 请求的服务器端请求超时 - Java Servlet

Server Side Request Timeout for long running http requests - Java Servlet

提问人:Eric 提问时间:10/12/2023 最后编辑:BalusCEric 更新时间:10/12/2023 访问量:25

问:

使用以下示例 servlet,它模拟了一些正在完成的工作,有些请求将在大约 10 秒内完成,而另一些请求将在 60 秒左右完成。客户端已请求我们“超时”任何运行时间超过 30 秒的请求。不希望使用此超时设置修改应用程序代码,因为此超时请求特定于应用程序的一个实例和一个客户端。

这是应该在 Application Server 作用域还是 HTTP Server 作用域中完成的操作?

该应用程序部署在 WebSphere 9 和 TomEE+ 8 中。我们使用的是 Apache HTTP Server 2.4.x。

完成此“超时”的最佳方法是什么?结果是 408、504 还是其他什么?提前致谢。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    long startTime = System.currentTimeMillis();
    
    try {
        
        Random r = new Random();
        if(r.nextBoolean()) {
            //simulate long running task
            Thread.sleep(60 *1000);
        }else {
            //simulate normal task
            Thread.sleep(10 * 1000);
        }
        
    }catch(InterruptedException e) {
        System.err.println(this.getClass().getSimpleName() + " Interrupted " + e);
    }
    
    long endTime = System.currentTimeMillis();
    
    response.setStatus(200);
    response.setContentType("text/plain");
    response.getWriter().write("Work completed in " + (endTime-startTime) + " milliseconds");
    response.getWriter().flush();
    response.getWriter().close();
}
服务器 超时 WebSphere Tomee-8

评论


答: 暂无答案