gpt4 book ai didi

java - Servlet在tomcat上同时处理多个请求

转载 作者:太空宇宙 更新时间:2023-11-04 10:09:48 27 4
gpt4 key购买 nike

我编写了一个 servlet 程序,它调用 java 类来生成随机字符串。我还编写了一个 HTML 文件,其中有 1000 个 IFRAME 指向 servlet 地址。如果多个请求发送到 servlet,则每个请求将在单独的线程中处理。因此在本例中,将创建 1000 个线程(1000 个请求)。问题在于,处理请求需要花费大量时间,并且如果请求超过 1000 等,则无法处理。如果我在后端进行复杂的计算,它会变得更慢。为了快速响应,需要在 servlet 级别(多线程)或 tomcat 级别(如果可能)进行哪些更改。有什么建议吗?

Servlet 代码

@WebServlet("/test")
public class MyServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static PrintWriter out=null;
private UserOperation operation=null;
private static int counter=0;
public MyServlet() {
super();
operation=new UserOperation();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
counter++;
out=response.getWriter();
String output=operation.getResult();
System.out.println(counter+":"+output);
out.print(output);
return;
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}

UserOperation.java

import java.util.Random;

public class UserOperation {
private Random rand=null;
private int max=9;
private int min=0;
private static final String [] RESULT= {"ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","EIGHT","NINE","TEN"};
public UserOperation() {
rand=new Random();
}
public String getResult() {
int randNum=rand.nextInt((max-min)+1)+min;
return RESULT[randNum];
}
}

HTML 文件

1000 次 IFRAME 调用。下面的行已在 HTML 文件中复制粘贴 1000 次。

<IFRAME src="http://localhost:8080/MultipleRequest/test" width="30px" height="30px"></IFRAME>

最佳答案

尝试在 UserOperation 类中实现 java.lang.Runnable 接口(interface)或扩展 java.lang.Thread 类以实现多线程。还可以尝试通过添加具有适当限制的 -Xmx 参数来增加 Java 堆大小。

关于java - Servlet在tomcat上同时处理多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52494162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com