Настройка тайм-аута сокета на канале Netty
-
03-10-2019 - |
Вопрос
У меня есть канал Netty, и я хотел бы установить тайм-аут на базовом сокете (он установлен по умолчанию на 0).
Цель времени ожидания заключается в том, что не используемый канал будет закрыт, если ничто не происходит в течение 15 минут.
Хотя я не вижу никакой конфигурации для этого, и сама сокета также скрыта от меня.
Спасибо
Решение
Если используется класс ReadTime UhatAndler, Time-Out может контролироваться.
Ниже приведена цитата из Javadoc..
public class MyPipelineFactory implements ChannelPipelineFactory {
private final Timer timer;
public MyPipelineFactory(Timer timer) {
this.timer = timer;
}
public ChannelPipeline getPipeline() {
// An example configuration that implements 30-second read timeout:
return Channels.pipeline(
new ReadTimeoutHandler(timer, 30), // timer must be shared.
new MyHandler());
}
}
ServerBootstrap bootstrap = ...;
Timer timer = new HashedWheelTimer();
...
bootstrap.setPipelineFactory(new MyPipelineFactory(timer));
...
Когда он будет вызывать тайм-аут, MyHandler.ExceptionCate (ChannelHandLercontext CTX, ExceptionEvent E) вызывается с ReadTimeoutexception..
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
if (e.getCause() instanceof ReadTimeoutException) {
// NOP
}
ctx.getChannel().close();
}
Не связан с StackOverflow