Совместное использование одного экземпляра HashedWheelTimer - PullRequest
2 голосов
/ 17 марта 2012

В этом вопросе

Тайм-аут асинхронного запроса Netty Comet

Мне было предложено разделить один экземпляр HashedWheelTimer между конвейерами.

Мой текущий код выглядит так

@Override
    public ChannelPipeline getPipeline() throws Exception {
    ChannelPipeline pipeline = Channels.pipeline();
     pipeline.addLast("decoder", new HttpRequestDecoder());
     pipeline.addLast("encoder", new HttpResponseEncoder());
     pipeline.addLast("handler", new HTTPRequestHandler());
     Timer timer = new HashedWheelTimer();
     pipeline.addLast("timeout", new IdleStateHandler(timer, 30, 30, 0));
    return pipeline; 

Насколько я понимаю, я делю один экземпляр HashedWheelTimer между конвейером, но каждый раз создаю новый экземпляр IdleStateHandler.

Это неправильно? Кто-нибудь может мне помочь, как это сделать правильно? Стоит ли делать экземпляры IdleStateHandler и HashedWheelTimer статическими?

1 Ответ

3 голосов
/ 17 марта 2012

Это неправильно.

С этим конвейером каждый новый канал будет иметь свой собственный экземпляр HashedWheelTimer.

Из Netty HashedWheelTimer doc

вы должны убедиться, что создали только один экземпляр и поделитесь этим со своим приложением. Одна из распространенных ошибок, которая делает Ваше приложение не отвечает, это создать новый экземпляр для каждого соединения.

Вы должны изменить экземпляр HashedWheelTimer как статический, оставьте IdleStateHandler как есть.

...