gpt4 book ai didi

java - http服务器是否在verticle上运行并拥有自己的事件循环?

转载 作者:行者123 更新时间:2023-12-02 02:27:05 26 4
gpt4 key购买 nike

我试图理解https://vertx.io/ Verticle系统和事件循环线程。

考虑以下代码:

public class MyVerticle extends AbstractVerticle {
public void start() {
vertx.createHttpServer().requestHandler(req -> {
req.response()
.putHeader("content-type", "text/plain")
.end("Hello from Vert.x!");
}).listen(8080);
}
}

上面的代码将创建一个新的 Verticle(MyVerticle),它也拥有事件循环线程。

当使用vertx.createHttpServer()创建HTTP服务器时,它是否会为HTTP服务器<传播一个新的Verticle/?如果正确,HTTP 服务器 在自己的 Verticle 上运行,并带有事件循环线程,并且两个 verticle 处于 Activity 状态。

MyVerticle 事件循环线程是否:

requestHandler(req -> {
req.response()
.putHeader("content-type", "text/plain")
.end("Hello from Vert.x!");
}

执行注册的请求处理程序?如果是,当请求到来时,MyVerticle 如何从 Http 服务器 接收事件来运行处理程序?

上面的代码并不清楚,两个verticle如何相互通信。如果有人能澄清一下那就太好了。

更新

我正在尝试描述这个场景:

enter image description here

假设,我部署了同一个 verticle 的两个实例,那么每个 verticle 将有自己的事件循环,并且 HTTP 服务器将启动两次。

当用户发送第一个请求时,它将在 Verticle 1 上处理,第二个请求将在 Verticle 2 上处理。当我的假设正确时,事件循环线程是相互独立的。对我来说,这意味着它不再是单线程的。

例如:

public class MyVerticle extends AbstractVerticle {

final int state;

public void start() {
vertx.createHttpServer().requestHandler(req -> {
state = state + 1;
req.response()
.putHeader("content-type", "text/plain")
.end("Hello from Vert.x!");
}).listen(8080);
}
}

当我改变状态时,我必须在Verticles之间同步?

我很确定我错了,这意味着我还不理解 verticle 的概念。

最佳答案

Verticle 是与事件循环关联的部署单元。在您的示例中,verticle 控制 HTTP 服务器(使用 listenclose 方法)。 HTTP 服务器将使用控制它的 verticle 的事件循环。

当您部署同一 verticle 的两个实例(将部署选项设置为 2)时,每个 verticle 将有自己的事件循环,并且 HTTP 服务器将启动两次。绑定(bind) HTTP 服务器的第一个 verticle 会触发服务器绑定(bind)操作,第二个 verticle 则会在第一个 verticle 启动的实际服务器上注册其请求处理程序(因为它们使用相同的端口)。当服务器接受新连接时,它将在它知道的两个 Verticle 实例上对该连接进行负载平衡。文档 https://vertx.io/docs/vertx-core/java/#_server_sharing 的这一部分对此进行了解释.

推荐的 Verticle 通信方式是事件总线。它提供了 verticle 之间轻量级、快速且异步的消息传递。根据用例,共享数据结构也可能是合适的。

关于java - http服务器是否在verticle上运行并拥有自己的事件循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65504314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com