Vert.x 的并发请求

Concurrent requests with Vert.x

考虑以下 Vert.x(版本 3.5.3)代码。

public static void main(String[] args) {
    Vertx vertx = Vertx.vertx();
    Handler<HttpServerRequest> handler = req -> {
        System.out.println(req.path() + " - start");
        vertx.executeBlocking(f -> {
            sleep(5000);
            f.complete();
        }, false, ar -> {
            req.response().end();
            System.out.println(req.path() + " - end");
        });
    };
    vertx.createHttpServer().requestHandler(handler).listen(8080);
}

为了测试服务器,我在浏览器的控制台中 运行 以下 javascript 代码。

for (let i = 1; i < 10; i++) {
    fetch('http://localhost:8080/test' + i).then(data => console.log('test' + i));
}

这些请求导致以下服务器端输出。

    /test1 - start
    /test2 - start
    /test3 - start
    /test4 - start
    /test5 - start
    /test6 - start
    >>>>>5 seconds later<<<<<
    /test1 - end
    /test2 - end
    /test7 - start
    /test3 - end
    /test8 - start
    /test4 - end
    /test5 - end
    /test6 - end
    /test9 - start
    >>>>>5 seconds later<<<<<
    /test7 - end
    /test8 - end
    /test9 - end

显示“>>>>>5 秒后<<<<<”行只是为了强调输出中的停顿。似乎一次只有 6 个请求被并发处理,尽管事实上我正在使用 "ordered=false" 的 executeBlocking。我期待在输出中看到所有 9 个请求开始,五秒后全部结束。

为什么会这样?这种行为可以改变吗?我做错了什么吗?

浏览器打开有限数量的到单个目标的连接。在你的例子中,这个限制似乎是 6.