2010-09-16 9 views
12

Tengo un canal de Netty y me gustaría establecer un tiempo de espera en el socket subyacente (está configurado por defecto en 0).Configuración del tiempo de espera del socket en el canal de Netty

El tiempo de espera es que el canal no utilizado se cerrará si no ocurre nada durante 15 minutos, por ejemplo.

Aunque no veo ninguna configuración para hacerlo, y el zócalo también está oculto para mí.

Gracias

Respuesta

13

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

La siguiente es una cotización 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(); 
} 
Cuestiones relacionadas