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

标签 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

为什么这些请求没有并行处理?

最佳答案

似乎人们时常会遇到这种情况(例如,请参阅here)。

但如this很好地解释了 - jetty 是为并行服务用户而构建的。

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

关于java - 为什么我的简单 Jetty 服务器一次仅处理 1 个请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45190458/

相关文章:

c# - 使用状态模式时业务逻辑存在于何处?

java - 对通过 ObjectInputStream 接收的数据进行排序

java - 在继承中观察到的奇怪行为

c++ - 多线程程序线程连接问题

java - 使用套接字的 HTTP 响应中的随机字符

使用 aiohttp 的 Python 3.6 异步 GET 请求同步运行

java - 如何在 java 中为特定构造函数创建方法?

c++ - 为什么这个函数级静态变量在 AIX 和 Solaris 中不是线程安全的?

python - 我的线程正确吗?如果是,那么为什么代码不起作用?

php - 从用户名 :password@example. com 链接访问凭据