IdleStateHandler appears to trigger continuously

Norman Maurer norman.maurer at googlemail.com
Mon May 16 03:48:04 EDT 2011


Using a idle event every 3 milliseconds is prolly the cause. I can't
believe you set it to 3ms for a good reason:

http://docs.jboss.org/netty/3.2/api/org/jboss/netty/handler/timeout/IdleStateHandler.html

Bye,
Norman


2011/5/16 B.L. Zeebub <roger.varley at googlemail.com>:
> Hi
>
> Have I misunderstood or mis-configured the use of the idleStateHandler? I
> thought it should trigger only when there has been neither a read or a write
> for the defined interval. What I'm seeing is the idle state event is being
> fired every interval regardless of whether or not there is traffic going
> through my pipeline. (I see the message "IdleStateHandler invoked: "
> approximately every 3000 ms) I see this in 3.2.3 and 3.2.4.
>
> 1) My start-up class.
>
> public class NettyClientService implements Runnable {
>
>        private static final Logger logger = Logger
>        .getLogger(NettyClientService.class.getName());
>
>        private Channel channel;
>
>        private String host;
>
>        private CommandExecutor executor;
>
>        public NettyClientService(String host, CommandExecutor executor) {
>                this.host = host;
>                this.executor = executor;
>        }
>
>        public void run() {
>
>                logger.info("Trying to connect to host " + host);
>
>                ClientBootstrap bootstrap = new ClientBootstrap(new
> OioClientSocketChannelFactory(Executors
>                                .newCachedThreadPool()));
>
>                // Set up the event pipeline factory.
>                Timer timer = new HashedWheelTimer();
>                bootstrap.setPipelineFactory(new ClientPipelineFactory(executor,timer));
>                bootstrap.setOption("keepAlive", true);
>
>                // Make a new connection.
>                ChannelFuture future = bootstrap.connect(new InetSocketAddress(
>                                host, 5956));
>
>                channel = future.awaitUninterruptibly().getChannel();
>                if (!channel.isConnected()) {
>
>                        logger.error("Failed to connect to " + host);
>                        executor.close();
>                        bootstrap.releaseExternalResources();
>                        return;
>                        }
>
>                logger.info("Connected to " + host);
>        }
>
>        public void shutdown() {
>                logger.info("Channel Close has been called on ClientService.shutdown()");
>                channel.close();
>        }
>
>
> }
>
> 2) My PipelineFactory
>
> public class ClientPipelineFactory implements ChannelPipelineFactory {
>
>        private CommandExecutor executor;
>        private Timer timer;
>
>        public ClientPipelineFactory(CommandExecutor executor, Timer timer) {
>                this.executor = executor;
>                this.timer = timer;
>        }
>
>        @Override
>        public ChannelPipeline getPipeline() throws Exception {
>
>                ChannelPipeline pipeline = Channels.pipeline();
>
>                pipeline.addLast("ObjectEncoder", new ObjectEncoder());
>                pipeline.addLast("ObjectDecoder", new ObjectDecoder());
>                pipeline.addLast("IdleStateHandler", new IdleStateHandler(timer,0,0,3));
>                pipeline.addLast("TimeOutHandler", new IdleStateTimeoutHandler());
>                pipeline.addLast("ChannelHandler",new ChannelExecutor(executor));
>                return pipeline;
>        }
>
> }
>
> 3) My timeout handler class
>
> public class IdleStateTimeoutHandler extends IdleStateAwareChannelHandler {
>
>    long lastinvocation;
>
>        @Override
>    public void channelIdle(ChannelHandlerContext ctx, IdleStateEvent e) {
>        if (e.getState() == IdleState.ALL_IDLE) {
>                //TODO remove
>                long now = System.currentTimeMillis();
>                System.out.println("IdleStateHandler invoked: " + (now -
> lastinvocation));
>                lastinvocation = now;
>            e.getChannel().write(new Heartbeat());
>        }
>    }
> }
>
> --
> View this message in context: http://netty-forums-and-mailing-lists.685743.n2.nabble.com/IdleStateHandler-appears-to-trigger-continuously-tp6367688p6367688.html
> Sent from the Netty User Group mailing list archive at Nabble.com.
> _______________________________________________
> netty-users mailing list
> netty-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/netty-users
>



More information about the netty-users mailing list