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一样有限.
请帮我理解正确的概念!
问候,克里斯
我和一个参与vert.x的人交谈过,他告诉我,我对"并发"问题基本上是正确的.
但是:他向我展示了文档中的一个部分,我完全错过了"缩放服务器"的详细解释.
基本概念是,当你编写一个Verticle时,你只有单核心性能.但是可以使用-instance参数启动vert.x平台,该参数定义运行给定Verticle的实例数.Vert.x在引擎盖下做了一些魔术,因此我的服务器的10个实例不会尝试打开10个服务器套接字,而实际上只打开了一个服务器套接字.这样,即使对于单个Verticle,vert.x也是水平可伸缩的.
这真是一个伟大的概念,尤其是一个伟大的框架!
归档时间: |
|
查看次数: |
3895 次 |
最近记录: |