请考虑以下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个请求都在输出中开始,然后五秒钟后,所有请求都结束。
为什么会这样?这种行为可以改变吗?我在做错什么吗?
答案 0 :(得分:1)
浏览器打开到单个目标的有限数量的连接。在您的情况下,该限制似乎是6。