Domanda

Ho un canale netty e desidero impostare un timeout sul socket sottostante (è impostato di default a 0).

Lo scopo del timeout è che il canale non utilizzato sarà chiuso se non sta succedendo niente per 15 minuti, per esempio.

Anche se non vedo alcuna configurazione a farlo, e la presa in sé è anche nascosto da me.

Grazie

È stato utile?

Soluzione

Se si utilizza classe ReadTimeoutHandler, il time-out può essere controllato.

Di seguito è riportata una citazione di 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));
...

Quando si causerà un time-out, MyHandler.exceptionCaught (ChannelHandlerContext CTX, ExceptionEvent e) viene chiamato con ReadTimeoutException .

@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
    if (e.getCause() instanceof ReadTimeoutException) {
        // NOP
    }
    ctx.getChannel().close();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top