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.
见
考虑以下 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.
见