Frage

Ich habe einen netty Kanal, und ich möchte ein Timeout auf dem darunterliegenden Sockel gesetzt (es standardmäßig auf 0 gesetzt ist).

Der Zweck des Timeout ist, dass die nicht benutzte Kanal geschlossen wird, wenn nichts wird 15 Minuten zum Beispiel passiert.

Auch wenn ich nicht jede Konfiguration sehen, dies zu tun, und die Buchse selbst ist auch von mir versteckt.

Danke

War es hilfreich?

Lösung

Wenn ReadTimeoutHandler Klasse verwendet wird, kann die Auszeit gesteuert werden.

Es folgt ein Zitat aus 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));
...

Wenn es ein Timeout verursacht, MyHandler.exceptionCaught (ChannelHandlerContext ctx, ExceptionEvent e) aufgerufen mit ReadTimeoutException .

@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
    if (e.getCause() instanceof ReadTimeoutException) {
        // NOP
    }
    ctx.getChannel().close();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top