سؤال

لديّ قناة Netty وأرغب في تعيين مهلة على المقبس الأساسي (يتم تعيينها بشكل افتراضي إلى 0).

الغرض من المهلة هو أنه سيتم إغلاق القناة غير المستخدمة إذا لم يحدث شيء لمدة 15 دقيقة على سبيل المثال.

على الرغم من أنني لا أرى أي تكوين للقيام بذلك ، والمقبس نفسه مخفي أيضًا.

شكرًا

هل كانت مفيدة؟

المحلول

إذا تم استخدام فئة readtimeouthandler ، فيمكن التحكم في المهلة.

فيما يلي اقتباس من جافادوك.

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));
...

عندما يتسبب ذلك في مهلة ، يتم استدعاء myHandler.ExceptionCaught readTimeOutException.

@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
    if (e.getCause() instanceof ReadTimeoutException) {
        // NOP
    }
    ctx.getChannel().close();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top