共享HashedWheelTimer的一个实例

时间:2012-03-16 22:04:32

标签: nio netty

在这个问题中

Netty Comet Async request time out

有人建议我在管道之间共享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的新实例。

是不是错了?任何人都可以帮助我正确地做到这一点吗?我应该制作IdleStateHandlerHashedWheelTimer静态的实例吗?

1 个答案:

答案 0 :(得分:3)

这是错误的。

使用此管道,每个新通道都将拥有自己的HashedWheelTimer实例。

来自Netty HashedWheelTimer doc

  

你应该确保只创建一个实例     在您的应用程序中共享它。这是常见的错误之一     你的应用程序没有响应,就是为每个连接创建一个新实例。

您应该将HashedWheelTimer实例更改为静态,保持IdleStateHandler不变。