2017-01-17 1 views
0

Приветствие;Vertx 3: будет ли обработчик <RoutingContext> HTTP-сервера выполняться в цикле event/run или в отдельном файле thred?

Интересно, создал ли я вершину httpServer и добавил класс обработчика для обработки запросов. Будет ли выполняться код внутри экземпляра обработчика в том же потоке (поток цикла событий) или он будет выполняться асинхронно в отдельном пуле потоков/потоков и не замедлит работу HTTPServer при работе с новыми запросами?

В настоящее время у меня есть один экземпляр обработчика (компонент весеннего знака, который реализует интерфейс Handler). когда поступает много HTTP-запросов на httpserver, код обработчика обрабатывает запросы медленно (запросы выполняются после того, как запросы выполняются в течение длительного времени, но исключение Vertx ThreadBlocked не выбрасывается)

+0

VertX каждый вертикальный представляет собой один поток. Поэтому, чтобы ответить на ваш вопрос, один поток будет обрабатывать все запросы. –

ответ

0

Короткий ответ: да , Каждая вершина сервера привязана к потоку цикла событий. Каждый обработчик связан с одним и тем же потоком. Это довольно легко проверить:

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 и работник verticles:
http://vertx.io/docs/vertx-core/groovy/#worker_verticles

Смежные вопросы