如何在servlet中设置并发请求数限制?

我得到了这个servlet,它将pdf文件返回到客户端Web浏览器。我们不希望冒任何风险,即当请求数量过多时,服务器将瘫痪。

我们希望采用一种应用程序级别(程序)的方式来设置并发请求数的限制,并在达到限制时向浏览器返回错误消息。我们需要在审批级别进行操作,因为我们在开发级别(tomcat)和生产级别(websphere)具有不同的servlet容器。

我必须强调,我想控制最大请求数,而不是会话数。用户可以通过具有相同会话的服务器发送多个请求。

任何想法?我已经考虑过使用静态计数器来跟踪请求的数量,但是这会引发竞争状况的问题。

回答:

我建议写一个简单的servlet Filter。在您的服务器上对其web.xml进行配置,以应用于您要限制并发请求数的路径。代码看起来像这样:

public class LimitFilter implements Filter {

private int limit = 5;

private int count;

private Object lock = new Object();

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain chain) throws IOException, ServletException {

try {

boolean ok;

synchronized (lock) {

ok = count++ < limit;

}

if (ok) {

// let the request through and process as usual

chain.doFilter(request, response);

} else {

// handle limit case, e.g. return status code 429 (Too Many Requests)

// see http://tools.ietf.org/html/rfc6585#page-3

}

} finally {

synchronized (lock) {

count--;

}

}

}

}

或者,您也可以将此逻辑放入您的HttpServlet。它只是更干净,更可重用Filter。您可能希望通过web.xml而不是硬编码来配置限制。

检查HTTP状态代码429的定义。

以上是 如何在servlet中设置并发请求数限制? 的全部内容, 来源链接: utcz.com/qa/400237.html

回到顶部