Настройка тайм-аута сокета на канале Netty

StackOverflow https://stackoverflow.com/questions/3726696

  •  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();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top