Question

I ai un canal netty et je voudrais fixer un délai d'attente sur le support sous-jacent (il est fixé par défaut à 0).

Le but du délai d'attente est que le canal non utilisé sera fermé si rien ne se passe pendant 15 minutes par exemple.

Bien que je ne vois aucune configuration de le faire, et la prise elle-même est caché de moi.

Merci

Était-ce utile?

La solution

Si la classe ReadTimeoutHandler est utilisé, le délai peut être contrôlé.

Ce qui suit est une citation 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));
...

Quand il provoquera une temporisation, MyHandler.exceptionCaught (ChannelHandlerContext CTX, ExceptionEvent e) est appelée avec ReadTimeoutException .

@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
    if (e.getCause() instanceof ReadTimeoutException) {
        // NOP
    }
    ctx.getChannel().close();
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top