在这个问题中
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
的新实例。
是不是错了?任何人都可以帮助我正确地做到这一点吗?我应该制作IdleStateHandler
和HashedWheelTimer
静态的实例吗?
答案 0 :(得分:3)
这是错误的。
使用此管道,每个新通道都将拥有自己的HashedWheelTimer实例。
来自Netty HashedWheelTimer doc
你应该确保只创建一个实例 在您的应用程序中共享它。这是常见的错误之一 你的应用程序没有响应,就是为每个连接创建一个新实例。
您应该将HashedWheelTimer实例更改为静态,保持IdleStateHandler不变。