为什么我的简单Jetty服务器一次只处理1个请求?

时间:2017-07-19 12:21:52

标签: java multithreading http jetty jetty-9

我第一次使用Jetty。

我的服务器设置:

server = new Server(port);
ContextHandler testContext = new ContextHandler();
testContext.setContextPath("/test");
testContext.setHandler(new TestServlet());

ContextHandlerCollection contexts = new ContextHandlerCollection();
contexts.setHandlers(new Handler[]{ testContext});

HandlerCollection handlers = new HandlerCollection();
handlers.setHandlers(new Handler[]{ contexts, new DefaultHandler() });

server.setHandler(handlers);
server.setStopAtShutdown(true);
server.start();

测试代码:

public class TestServlet extends AbstractHandler
{
    @Override
    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
        System.out.println("a");
        try {
            Thread.sleep(2500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("b");
        try {
            Thread.sleep(2500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("c");
        try {
            Thread.sleep(2500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        baseRequest.setHandled(true);
    }
}

如果我在两个不同的标签上访问localhost/test,第二个请求会等到第一个完成,所以我的日志看起来像:

a
b
c
a
b
c

为什么不同时处理请求?

1 个答案:

答案 0 :(得分:2)

似乎人们不时遇到这种情况(例如,见here)。

但正如this很好地解释 - jetty 内置用于并行服务用户。

所以答案是:这不是码头问题 - 而是用户错误;例如,通过从单个浏览器运行请求(并且该浏览器在内部序列化请求)。