Как подсчитать реальное время ответа в Netty 4?

Есть HTTP сервер на Netty 4, собственно вопрос в том, каким образом можно замерить время с того момента как запрос пришел на сервер и был отправлен ответ. Если мерить внутри SimpleChannelInboundHandler, толку никакого, так как время там — это время работы обработчика. Или есть возможность каким-нибудь образом получить размер очереди обрабатываемых запросов.
  • Вопрос задан
  • 2772 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
new ServerBootstrap().group(group)
                     .channel(NioServerSocketChannel.class)
                     .childHandler(new ChannelInitializer<SocketChannel>() {
                          @Override
                           public void initChannel(SocketChannel socketChannel) {
                               final long startTime = System.currentTimeMillis();

                               ChannelPipeline pipeline = socketChannel.pipeline();
                               pipeline.addLast(new ChannelOutboundHandlerAdapter() {
                                   @Override
                                   public void read(ChannelHandlerContext ctx) {
                                       ctx.writeAndFlush(Unpooled.wrappedBuffer("Hello!".getBytes()));
                                          .addListener(ChannelFutureListener.CLOSE);
                                   }
                               });

                               ChannelFuture f = socketChannel.closeFuture();
                               f.addListener(new ChannelFutureListener() {
                                   @Override
                                   public void operationComplete(ChannelFuture future) throws Exception {
                                       System.out.println(System.currentTimeMillis() - startTime);
                                   }
                               });
                           }
                       })
                       .bind("localhost", 1025)
                       .sync()
                       .channel()
                       .closeFuture()
                       .syncUninterruptibly();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы