与Vert.x并发的请求

时间:2018-10-04 16:02:23

标签: 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秒后的“ >>>>>>> <<<<<”行仅用于强调输出中的暂停。尽管我使用的是executeBlocking和“ ordered = false”,但一次似乎只同时处理6个请求。我期望看到所有9个请求都在输出中开始,然后五秒钟后,所有请求都结束。

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

1 个答案:

答案 0 :(得分:1)

浏览器打开到单个目标的有限数量的连接。在您的情况下,该限制似乎是6。

请参见Max parallel http connections in a browser?