根据vert.x文档,使用verticles部署是可选的。如果是这样的话-我如何将http服务器部署到多个事件循环上?以下是我尝试的内容-也阅读了api文档,但找不到任何内容:
Vertx vertx = Vertx.vertx(new VertxOptions().setEventLoopPoolSize(10));
HttpServerOptions options = new HttpServerOptions().setLogActivity(true);
for (int i = 0; i < 10; i++) {
vertx.createHttpServer(options).requestHandler(request -> {
request.response().end("Hello world");
}).listen(8081);
}
这似乎在第一个事件循环上创建了10个http服务器,但我希望每个事件循环有1个服务器。
以下是我在日志中看到的内容-所有eventloop-thread-0:
08:42:46.667[vert.x-eventloop-thread-0]调试io.netty.handler.logging.logginghandler-[id:0x0c651def,l:/0:0:0:0:0:1:8081-r:/0:0:0:0:0:1:50978]读取:78b
08:42:46.805[vert.x-eventloop-thread-0]调试io.netty.handler.logging.logginghandler-[id:0xe050d078,l:/0:0:0:0:0:1:8081-r:/0:0:0:0:0:1:51000]读取:78b
08:42:47.400[vert.x-eventloop-thread-0]调试io.netty.handler.logging.logginghandler-[id:0x22b626b8,l:/0:0:0:0:0:1:8081-r:/0:0:0:0:0:1:51002]读取:78b
1条答案
按热度按时间iqxoj9l91#
“可选”并不意味着“你可以,得到同样的好处”“可选”只是指“你可以”。
vert.x有线程关联的概念。从同一线程创建的http服务器将始终分配给同一事件循环。否则会出现严重的线程安全问题。
您可以将上面的示例代码与以下代码进行比较:
输出类似于:
这是因为每个事件循环线程现在都绑定到一个单独的执行线程。