Vert.x对单个Verticle有真正的并发性吗?

Kr0*_*r0e 8 java concurrency asynchronous netty vert.x

问题可能看起来像一个巨魔但实际上是关于vert.x如何管理并发,因为Verticle本身在专用线程中运行.

让我们看看用Java编写的这个简单的vert.x http服务器:

import org.vertx.java.core.Handler;
import org.vertx.java.core.http.HttpServerRequest;
import org.vertx.java.platform.Verticle;

public class Server extends Verticle {
    public void start() {
        vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() {
           public void handle(HttpServerRequest req) {
                req.response().end("Hello");
           }
        }).listen(8080);
    }
}
Run Code Online (Sandbox Code Playgroud)

据我了解文档,这整个文件代表一个Verticle.所以start方法在专用的Verticle线程中调用,到目前为止一直很好.但是在哪里调用了requestHandler?如果在这个线程上调用它,我无法看到它比node.js更好.

我对Netty非常熟悉,它是vert.x基于的网络/并发库.每个传入的连接都映射到一个专门的线程,可以很好地扩展.那么..这是否意味着传入的连接也代表了Verticle?但是,如何将Verticle实例"Server"与这些客户端进行通信?事实上,我会说这个概念与Node.js一样有限.

请帮我理解正确的概念!

问候,克里斯

Kr0*_*r0e 7

我和一个参与vert.x的人交谈过,他告诉我,我对"并发"问题基本上是正确的.

但是:他向我展示了文档中的一个部分,我完全错过了"缩放服务器"的详细解释.

基本概念是,当你编写一个Verticle时,你只有单核心性能.但是可以使用-instance参数启动vert.x平台,该参数定义运行给定Verticle的实例数.Vert.x在引擎盖下做了一些魔术,因此我的服务器的10个实例不会尝试打开10个服务器套接字,而实际上只打开了一个服务器套接字.这样,即使对于单个Verticle,vert.x也是水平可伸缩的.

这真是一个伟大的概念,尤其是一个伟大的框架!