代码之家  ›  专栏  ›  技术社区  ›  Gintas_

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

  •  2
  • Gintas_  · 技术社区  · 7 年前

    我的服务器设置:

    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 回复  |  直到 7 年前
        1
  •  2
  •   GhostCat    7 年前

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

    this 很好地解释了-码头是 用于并行服务用户。

    码头 问题-但用户错误;例如,通过从单个浏览器运行请求(该浏览器内部序列化请求)。