2017-07-19 49 views
2

我第一次使用Jetty。爲什麼我的簡單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 

爲什麼他們的請求沒有並行處理?

+0

@GhostCat希望正確,試圖同時在2個瀏覽器上運行,謝謝 –

+0

是的,它確實,謝謝 –

+1

兄弟不是沒有問題,謝謝你 –

回答

2

似乎人們偶爾遇到這個問題(例如參見here)。

但作爲this很好解釋 - 碼頭是服務用戶並行。

所以答案是:這不是碼頭問題 - 但用戶錯誤;例如通過運行來自單個瀏覽器的請求(並且該瀏覽器在內部序列化請求)。

相關問題