@ChannelHandler.Sharable public class IdleStateHandler extends SimpleChannelUpstreamHandler implements LifeCycleAwareChannelHandler, ExternalResourceReleasable
IdleStateEvent when a Channel has not performed
 read, write, or both operation for a while.
 | Property | Meaning | 
|---|---|
| readerIdleTime | an IdleStateEventwhose state isIdleState.READER_IDLEwill be triggered when no read was performed for the specified period of
     time.  Specify0to disable. | 
| writerIdleTime | an IdleStateEventwhose state isIdleState.WRITER_IDLEwill be triggered when no write was performed for the specified period of
     time.  Specify0to disable. | 
| allIdleTime | an IdleStateEventwhose state isIdleState.ALL_IDLEwill be triggered when neither read nor write was performed for the
     specified period of time.  Specify0to disable. | 
// An example that sends a ping message when there is no outbound traffic // for 30 seconds. The connection is closed when there is no inbound traffic // for 60 seconds. public class MyPipelineFactory implementsTheChannelPipelineFactory{ private finalTimertimer; private finalChannelHandleridleStateHandler; public MyPipelineFactory(Timertimer) { this.timer = timer; this.idleStateHandler = newIdleStateHandler(timer, 60, 30, 0), // timer must be shared. } publicChannelPipelinegetPipeline() { returnChannels.pipeline( idleStateHandler, new MyHandler()); } } // Handler should handle theIdleStateEventtriggered byIdleStateHandler. public class MyHandler extendsIdleStateAwareChannelHandler{@Overridepublic void channelIdle(ChannelHandlerContextctx,IdleStateEvente) { if (e.getState() ==IdleState.READER_IDLE) { e.getChannel().close(); } else if (e.getState() ==IdleState.WRITER_IDLE) { e.getChannel().write(new PingMessage()); } } }ServerBootstrapbootstrap = ...;Timertimer = newHashedWheelTimer(); ... bootstrap.setPipelineFactory(new MyPipelineFactory(timer)); ...
Timer which was specified when the IdleStateHandler is
 created should be stopped manually by calling releaseExternalResources()
 or Timer.stop() when your application shuts down.ChannelHandler.Sharable| 构造器和说明 | 
|---|
| IdleStateHandler(Timer timer,
                int readerIdleTimeSeconds,
                int writerIdleTimeSeconds,
                int allIdleTimeSeconds)Creates a new instance. | 
| IdleStateHandler(Timer timer,
                long readerIdleTime,
                long writerIdleTime,
                long allIdleTime,
                java.util.concurrent.TimeUnit unit)Creates a new instance. | 
| 限定符和类型 | 方法和说明 | 
|---|---|
| void | afterAdd(ChannelHandlerContext ctx) | 
| void | afterRemove(ChannelHandlerContext ctx) | 
| void | beforeAdd(ChannelHandlerContext ctx) | 
| void | beforeRemove(ChannelHandlerContext ctx) | 
| void | channelClosed(ChannelHandlerContext ctx,
             ChannelStateEvent e)Invoked when a  Channelwas closed and all its related resources
 were released. | 
| protected void | channelIdle(ChannelHandlerContext ctx,
           IdleState state,
           long lastActivityTimeMillis) | 
| void | channelOpen(ChannelHandlerContext ctx,
           ChannelStateEvent e)Invoked when a  Channelis open, but not bound nor connected. | 
| long | getAllIdleTimeInMillis()Return the allIdleTime that was given when instance this class in milliseconds. | 
| long | getReaderIdleTimeInMillis()Return the readerIdleTime that was given when instance this class in milliseconds. | 
| long | getWriterIdleTimeInMillis()Return the writerIdleTime that was given when instance this class in milliseconds. | 
| void | messageReceived(ChannelHandlerContext ctx,
               MessageEvent e)Invoked when a message object (e.g:  ChannelBuffer) was received
 from a remote peer. | 
| void | releaseExternalResources()Stops the  Timerwhich was specified in the constructor of this
 handler. | 
| void | writeComplete(ChannelHandlerContext ctx,
             WriteCompletionEvent e)Invoked when something was written into a  Channel. | 
channelBound, channelConnected, channelDisconnected, channelInterestChanged, channelUnbound, childChannelClosed, childChannelOpen, exceptionCaught, handleUpstreampublic IdleStateHandler(Timer timer, int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds)
timer - the Timer that is used to trigger the scheduled event.
        The recommended Timer implementation is HashedWheelTimer.readerIdleTimeSeconds - an IdleStateEvent whose state is IdleState.READER_IDLE
        will be triggered when no read was performed for the specified
        period of time.  Specify 0 to disable.writerIdleTimeSeconds - an IdleStateEvent whose state is IdleState.WRITER_IDLE
        will be triggered when no write was performed for the specified
        period of time.  Specify 0 to disable.allIdleTimeSeconds - an IdleStateEvent whose state is IdleState.ALL_IDLE
        will be triggered when neither read nor write was performed for
        the specified period of time.  Specify 0 to disable.public IdleStateHandler(Timer timer, long readerIdleTime, long writerIdleTime, long allIdleTime, java.util.concurrent.TimeUnit unit)
timer - the Timer that is used to trigger the scheduled event.
        The recommended Timer implementation is HashedWheelTimer.readerIdleTime - an IdleStateEvent whose state is IdleState.READER_IDLE
        will be triggered when no read was performed for the specified
        period of time.  Specify 0 to disable.writerIdleTime - an IdleStateEvent whose state is IdleState.WRITER_IDLE
        will be triggered when no write was performed for the specified
        period of time.  Specify 0 to disable.allIdleTime - an IdleStateEvent whose state is IdleState.ALL_IDLE
        will be triggered when neither read nor write was performed for
        the specified period of time.  Specify 0 to disable.unit - the TimeUnit of readerIdleTime,
        writeIdleTime, and allIdleTimepublic long getReaderIdleTimeInMillis()
public long getWriterIdleTimeInMillis()
public long getAllIdleTimeInMillis()
public void releaseExternalResources()
public void beforeAdd(ChannelHandlerContext ctx) throws java.lang.Exception
beforeAdd 在接口中 LifeCycleAwareChannelHandlerjava.lang.Exceptionpublic void afterAdd(ChannelHandlerContext ctx) throws java.lang.Exception
afterAdd 在接口中 LifeCycleAwareChannelHandlerjava.lang.Exceptionpublic void beforeRemove(ChannelHandlerContext ctx) throws java.lang.Exception
beforeRemove 在接口中 LifeCycleAwareChannelHandlerjava.lang.Exceptionpublic void afterRemove(ChannelHandlerContext ctx) throws java.lang.Exception
afterRemove 在接口中 LifeCycleAwareChannelHandlerjava.lang.Exceptionpublic void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) throws java.lang.Exception
SimpleChannelUpstreamHandlerChannel is open, but not bound nor connected.
 channelOpen 在类中 SimpleChannelUpstreamHandlerjava.lang.Exceptionpublic void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws java.lang.Exception
SimpleChannelUpstreamHandlerChannel was closed and all its related resources
 were released.channelClosed 在类中 SimpleChannelUpstreamHandlerjava.lang.Exceptionpublic void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws java.lang.Exception
SimpleChannelUpstreamHandlerChannelBuffer) was received
 from a remote peer.messageReceived 在类中 SimpleChannelUpstreamHandlerjava.lang.Exceptionpublic void writeComplete(ChannelHandlerContext ctx, WriteCompletionEvent e) throws java.lang.Exception
SimpleChannelUpstreamHandlerChannel.writeComplete 在类中 SimpleChannelUpstreamHandlerjava.lang.Exceptionprotected void channelIdle(ChannelHandlerContext ctx, IdleState state, long lastActivityTimeMillis) throws java.lang.Exception
java.lang.Exception