Hi,
I am trying to bench async servlet, tomcat7 and tomcat8, now it's seems I can
only start 2 request from a end-point.
I make a simple tool, start 100 request same time, each request has own
session, and write a simple async servlet, which pasted in the bottom of this
mail.
It's the result:
06-29 16:28:52 622 INFO (Test.java:35)- test serve 1
06-29 16:28:52 622 INFO (Test.java:35)- test serve 2
06-29 16:29:02 633 DEBUG (Test.java:54)- timout and print
06-29 16:29:02 637 DEBUG (Test.java:54)- timout and print
06-29 16:29:02 642 INFO (Test.java:35)- test serve 3
06-29 16:29:02 677 INFO (Test.java:35)- test serve 4
06-29 16:29:12 647 DEBUG (Test.java:54)- timout and print
06-29 16:29:12 650 INFO (Test.java:35)- test serve 5
06-29 16:29:12 682 INFO (Test.java:35)- test serve 6
....
i have test this on tomcat7 and tomcat8 in windows and linux(ubuntu), and test
it in browser manually.
Best Regards
===================
my Test servlet:
===================
package com.botao.im;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
/**
* Servlet implementation class Test
*/
@WebServlet(asyncSupported = true, name = "test", urlPatterns = { "/test" })
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(Test.class);
private static ScheduledExecutorService es =
Executors.newSingleThreadScheduledExecutor();
private static int counter = 0;
protected void doGet(HttpServletRequest request, final
HttpServletResponse response) throws ServletException, IOException {
logger.info("test serve " + (++counter ));
final AsyncContext context = request.startAsync();
context.start(new Runnable() {
@Override
public void run() {
context.setTimeout(1000000);
es.schedule(new Runnable(){
@Override
public void run() {
response.setContentType("text/plain");
PrintWriter out;
try {
out =
response.getWriter();
out.print("hello");
out.flush();
context.complete();
logger.debug("timout and print");
} catch (IOException e)
{
}
}
}, 10, TimeUnit.SECONDS);
}
});
}
}