Pregunta

Tengo un canal netty y me gustaría establecer un tiempo de espera en el zócalo subyacente (que se establece por defecto en 0).

El propósito del tiempo de espera es que el canal no utilizado se cerrará si no pasa nada durante 15 minutos, por ejemplo.

A pesar de que no veo ninguna configuración para hacerlo, y la toma en sí también se me oculta.

Gracias

¿Fue útil?

Solución

Si se utiliza la clase ReadTimeoutHandler, el tiempo de espera puede ser controlada.

siguiente es una cita de 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));
...

Cuando se causará un tiempo de espera, MyHandler.exceptionCaught (ChannelHandlerContext CTX, ExceptionEvent e) se llama con ReadTimeoutException .

@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
    if (e.getCause() instanceof ReadTimeoutException) {
        // NOP
    }
    ctx.getChannel().close();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top