问候;
我想知道我是否创建了一个vertx httpServer并添加了一个处理程序类来处理请求。处理程序实例中的代码是在同一线程(事件循环线程)中执行,还是在单独的线程/线程池中异步执行,不会减慢HTTPServer侦听新请求操作的速度?
目前,我只有一个Handler实例(一个实现Handler接口的spring signelton bean )。当许多HTTP请求到达httpserver时,处理程序代码处理请求的速度会很慢(请求在很长一段时间后才会执行,但不会抛出vertx ThreadBlocked异常)
发布于 2017-01-21 04:00:55
简短的回答是肯定的。每个服务器垂直节点都绑定到一个事件循环线程。每个处理程序都绑定到相同的线程。这很容易检查:
public static void main(String[] args) {
Vertx vertx = Vertx.vertx();
vertx.deployVerticle(new ServerVerticle());
}
public static class ServerVerticle extends AbstractVerticle {
@Override
public void start() {
Router router = Router.router(vertx);
router.get("/").handler((r) -> {
System.out.println("Handler " + Thread.currentThread().getName());
r.response().end("");
});
System.out.println("Main verticle " + Thread.currentThread().getName());
vertx.createHttpServer().requestHandler(router::accept).listen(8888);
}
}访问服务器,您会注意到您的处理程序与服务器在同一个事件循环线程上。
如果您有运行缓慢的处理程序,请使用EventBus和worker verticle:
http://vertx.io/docs/vertx-core/groovy/#worker_verticles
https://stackoverflow.com/questions/41696328
复制相似问题