为什么我的简单 Jetty 服务器一次只处理 1 个请求?
Why is my simple Jetty server handling only 1 request at a time?
我是第一次使用 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
为什么他们的请求不是并行处理的?
似乎人们 运行 时不时地参与其中(例如参见 [=10=])。
但正如 this 很好地解释的那样 - jetty 建造 用于并行服务用户。
所以答案是:这不是 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
为什么他们的请求不是并行处理的?
似乎人们 运行 时不时地参与其中(例如参见 [=10=])。
但正如 this 很好地解释的那样 - jetty 建造 用于并行服务用户。
所以答案是:这不是 jetty 问题 - 而是用户错误;例如,通过 运行 连接来自单个浏览器的请求(并且该浏览器在内部序列化请求)。