Имитация (добавление) задержки в Netty Server

Как лучше всего добавить задержку к серверу Netty для тестирования? Если перед writeAndFlush () добавляется простой Thread.sleep(n), обработчик не освобождается для обработки следующего запроса до тех пор, пока не будет выполнен writeAndFlush(), что необходимо при имитации случайных запросов в нагрузочном тесте, чтобы получить задержка. Что происходит теперь с Thread.sleep(n), так это то, что следующий запрос не принимается channelRead() до тех пор, пока предыдущий не вернет ChannelFuture из writeAndFlush(). Какие-либо предложения?

1 ответ

Что ж, вы можете запланировать задачу в цикл событий Netty с необходимой задержкой в ​​методе обработчика channelRead:

      ctx.executor().schedule(() -> {
    ctx.writeAndFlush(...);
}, 100, TimeUnit.MILLISECONDS);

Он не будет блокировать текущий поток и будет выполняться асинхронно. Но не забывайте выпускать входящиеByteBufвнутри задачи, чтобы избежать утечек буфера.

Другие вопросы по тегам